我的问题是:用 getMessage 或 toString 或两者都记录更好吗?考虑到开源引发的错误。看到评论中的问题,但没有得到答案。也许我错过了什么?不要介意记录其中之一的小性能影响,但除非有充分的理由,否则不要同时记录两者。
意思是 log(ex) 或 log(ex.getMessage),不是堆栈跟踪。
记录异常:哪个更好: log.warn(ex.getMessage(), ex) 或 log.warn(ex, ex);
我注意到有时 getMessage 返回空或 null,所以在一般实践中有什么理由不使用:
log.warn(ex, ex);
因为它似乎打印了类名和消息(如果已设置)?我想一个原因可能是如果一个子类过度使用字符串而不打印消息,但实际上任何 hibernate、apache 或 spring 库都这样做吗?
最佳答案
怎么样
log.warn("some descriptive message, maybe with context {}",
someId, ex);
异常详细信息将作为堆栈跟踪的一部分打印出来,因此您通常不需要将它们包含在消息中。
如果您想抑制堆栈跟踪并只打印异常消息,通常,ex.toString()
比 ex.getMessage()
效果更好,因为它还包括消息不包含的异常类名。事实上,消息通常是空的(例如 NullPointerExceptions)。
关于Java 日志记录异常,使用 getMessage 或 toString : log. warn(ex.getMessage()) 或 log.warn(ex) 使用开源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28272473/