gpt4 book ai didi

java - 何时记录链式异常?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:26:17 29 4
gpt4 key购买 nike

我是一名绿色开发人员,试图在大型多层 Java 应用程序中获得错误处理的句柄(har-har)。在很多情况下,我认为通过多层链接异常是一个好主意;例如当在最低层调用某些外部服务失败导致 View 一直出现问题时:

  • 已请求内容 X,但用户未获得授权
    • 原因:授权用户列表为空
      • 原因:用户管理网络服务响应错误请求 - 参数 foo 的格式必须类似于“xyz”

最重要的异常,我真正想检查其堆栈跟踪的异常,是链中的最后一个;我提出了一个错误的请求,我需要修复 foo 的格式。但是当我让这个异常在层中冒泡时,很好地链接在对每一层都有意义的异常中......当我最终捕获并记录事情时,默认的日志记录行为总是向我显示关于最外层异常的细节,并且可能是根本原因的 5 行堆栈跟踪。

这让我想在异常发生时记录它们,并让它们冒泡,但你最终会记录大多数事情两次;它们何时发生以及何时最终被捕获。

此处的最佳做法是什么?

最佳答案

我会推荐一种不同的异常管理方法。在应用程序的最顶层(如请求入口点)创建一个 try catch block 来调用任何运行时异常。最好有 2 个 catch block :- 针对您的应用程序特定(业务)异常- 其余(异常(exception))

如您所见,您需要介绍您自己的异常类型,您将扩展该异常类型以针对不同目的创建不同的异常。例如,您可以为应用程序的每一层、每个集成等创建自定义异常。使用未经检查的异常,因为它们都将在顶层处理。当任何异常情况发生时(捕获低级异常)你应该:- 放置与业务上下文相关的描述(例如“无法从数据库加载帐户数据”- 添加原始异常的描述(例如“原始错误:连接到数据库失败”)- 将原始异常传递给您的异常,以免丢失痕迹- 扔了就忘了。换句话说,顶级 catch block 负责适本地处理它(回滚事务、显示错误消息或您可能需要的任何其他内容

关于java - 何时记录链式异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13282993/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com