Java日志记录异常,使用getMessage或toString:log.warn(ex.getMessage())或log.warn(ex)使用开源

tgk*_*rog 8 java logging exception

我的问题是:最好用getMessage或toString或两者来记录?考虑到开源引发的错误.在评论中看到了问题,但没有得到答案.也许我错过了什么?不要介意记录其中一个的性能损失,但除非有充分的理由,否则不要记录它们.

含义log(ex)或log(ex.getMessage),不是谈论堆栈跟踪.

1,23

记录异常:哪个更好:log.warn(ex.getMessage(),ex)或log.warn(ex,ex);

我注意到有时getMessage返回空或null,所以通常的做法是有任何理由不使用:

log.warn(ex, ex);
Run Code Online (Sandbox Code Playgroud)

因为它似乎打印了类名和消息(如果设置)?我想有一个原因可能是,如果一个子类已经过度使用字符串而不是打印消息,但实际上是否有任何hibernate,apache或spring libs这样做?

Thi*_*ilo 10

怎么样

log.warn("some descriptive message, maybe with context {}", 
    someId, ex);
Run Code Online (Sandbox Code Playgroud)

异常详细信息已经作为堆栈跟踪的一部分打印出来,因此您通常不需要将它们包含在消息中.

如果你想要抑制堆栈跟踪并且只打印异常消息,通常ex.toString()ex.getMessage()它更好,因为它还包括异常类名,而消息却没有.实际上,消息通常是空的(例如使用NullPointerExceptions).