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

标签 java exception logging

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

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

1 , 23

记录异常:哪个更好: 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/

相关文章:

exception - 方法应该忽略非法输入还是引发异常?

java - Flutter 在启动时崩溃 : Didn't find class . MainActivity 在路径 DexPathList 上

java - 在鼠标按下事件中启动 "asyncExec"会导致阻塞行为

将 double 从文件传输到数组时,Java 跳过包含字符串/boolean 值的行

r - 从taskcheduleR扩展日志记录

java - 即使没有流量也强制在 tomcat log4j2 中进行日志翻转

c# - 我的日志管理器的路径共享违规

java - 系统服务器和应用程序权限

java - 捕获异常后继续(Android/Java)

java - 有没有办法去 try catch ?