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

Java Logging exceptions, use getMessage or toString : log.warn(ex.getMessage()) or log.warn(ex) working with open source

我的问题是:用 getMessage 或 toString 或两者都记录更好吗?考虑到开源引发的错误。看到评论中的问题,但没有得到答案。也许我错过了什么?不要介意记录其中之一的小性能影响,但除非有充分的理由,否则不想记录两者。

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

看到了1 , 2 and 3

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

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

log.warn(ex, ex);

因为它似乎打印了 class 名称和消息(如果已设置)?我想一个原因可能是如果子 class 过度使用字符串而不打印消息,但实际上任何休眠、apache 或 spring 库都这样做吗?

怎么样

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

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

如果您想抑制堆栈跟踪并只打印异常消息,通常,ex.toString()ex.getMessage() 效果更好,因为它还包括异常 class 名称,这消息没有。事实上,消息通常是空的(例如 NullPointerExceptions)。