java-记录异常并引发新异常-它是反模式吗?
作者:互联网
如果我们捕获到异常然后抛出异常,但不是同一类型(仅基于第一个),则仍然是反模式来记录第一个异常吗?
简单的例子:
} catch (CloneNotSupportedException e) {
log.warn(e, e.getMessage());
throw new InternalError(e.getMessage());
}
解决方法:
捕获异常,创建日志消息并引发新异常根本不是反模式.
通常,当您进行的交互/通讯跨越某个系统边界(例如,两层,模块或组件之间的通信.例如,这可以是客户端服务器交互,应用程序层与持久层交互,或者模块x调用模块y的服务.
让我们仔细看看模式的动作.
记录异常?
您想在发生异常的地方记录异常.这并不意味着您必须将其正确记录在日志中,但至少要在您的上下文中进行记录.
另外,请考虑您的日志记录配置.您可能具有与软件包,组件,系统…相关的配置,并且想要确保在正确的日志中看到异常.
引发新的异常?
通常,新异常是旧异常的抽象.这很有用,因为方法调用者不必处理很多不同的异常.
另外,您不希望总是呼叫者详细了解您的上下文中发生的情况,因此使用新的异常可以隐藏信息.
捕获异常?
显然,需要执行其他操作.
标签:logging,exception,try-catch,anti-patterns,java 来源: https://codeday.me/bug/20191111/2023040.html