Java Logging exceptions, use getMessage or toString : log.warn(ex.getMessage()) or log.warn(ex) 使用开源

2022-09-04 02:09:17

我的问题是:最好使用getMessage或toString或两者进行记录?考虑开源抛出的错误。在评论中看到了问题,但没有得到答案。也许我错过了什么?不要介意记录其中一个的小性能损失,但除非有充分的理由,否则不想同时记录两者。

意思是log(ex)或log(ex.getMessage),而不是谈论堆栈跟踪。

123

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

我注意到有时getMessage返回空或空,所以在一般实践中有什么理由不使用:

log.warn(ex, ex);

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


答案 1

怎么样

log.warn("some descriptive message, maybe with context {}", 
    someId, ex);

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

如果要抑制堆栈跟踪并仅打印异常消息,通常比 效果更好,因为它还包括异常类名,而消息则不包含异常类名。实际上,消息通常为空(例如,对于 NullPointerExceptions)。ex.toString()ex.getMessage()


答案 2