【发布时间】:2015-09-29 09:25:05
【问题描述】:
关于异常使用以下两段代码是否有最佳实践。
//code1
} catch (SomeException e) {
logger.error("Noinstance available!", e.getMessage());
}
//code2
} catch (SomeException e) {
logger.error("Noinstance available!", e);
}
什么时候应该使用异常的getMessage方法?
【问题讨论】:
-
几乎一直如此。除非您知道 SomeException 和覆盖的 toString 方法。 e.getMessage() 是标准方式
-
如果你只记录消息,你不会得到堆栈跟踪,或者嵌套异常应该有一个。记录异常...
-
@TheNeoNoirDeveloper:“几乎一直”什么?首先?我不想丢失有关异常来自何处、原因等的信息。
-
您应该始终记录整个异常,而不仅仅是消息。否则日志框架无法为您提供整个堆栈跟踪。
-
这是我的理论,如果 SomeException 是一个特定的异常(我认为它的意思),那么保留捕获异常的完整信息是没有意义的,(日志框架知道在哪里,当然必须在模式中定义),例如,如果我正在捕捉 (FileNotFoundException),那么我知道它是 fileNotFoundException 并且打印整个堆栈只是我不在乎的额外信息。因此 e.getMessage() 已经足够好了。现在有了 IOException 或 Exception,那么我必须知道究竟是什么原因造成的。@JonSkeet 你说什么?