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)。
我的问题是:用 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)。