java - LOGGER.error(exception.getMessage()) 和 LOGGER.error(exception.getMessage(), exception) 有什么区别

标签 java spring log4j2 apache-commons java.util.logging

Like in this picture

我知道它们都可以正常工作,但我只是想知道它们之间有何不同? PS:我是初学者。

最佳答案

A LogEvent可以同时包含消息和异常。如果您使用第一种形式:

LOGGER.error(exception.getMessage());

只有错误消息会被记录下来,您的日志中会有类似的输出(取决于布局):

[ERROR] - Exception message.

如果你使用第二种形式:

LOGGER.error(exception.getMessage(), exception);

您将同时收到消息和异常。这通常会在日志中输出堆栈跟踪:

[ERROR] - Exception message.
java.lang.RuntimeException: Exception message.
    at pl.copernik.log4j.Log4j2Test.run(Log4j2Test.java:19) [classes/:?]
    at pl.copernik.log4j.Log4j2Test.main(Log4j2Test.java:15) [classes/:?]

由于您始终可以配置 Log4j 2.x 以抑制输出中的堆栈跟踪(请参阅 PatternLayout documentation 中的 alwaysWriteExceptions),因此第二种形式总是更好,因为它提供了更多信息。

备注:由于堆栈跟踪总是打印错误消息,我建议使用第三种形式:

LOGGER.error("An unexpected condition occurred while performing foo: {}",
    exception.getMessage(), exception);

这样你就可以在异常发生时解释上下文:

[ERROR] - An unexpected condition occurred while performing foo: Exception message.
java.lang.RuntimeException: Exception message.
    at pl.copernik.log4j.Log4j2Test.run(Log4j2Test.java:19) [classes/:?]
    at pl.copernik.log4j.Log4j2Test.main(Log4j2Test.java:15) [classes/:?]

关于java - LOGGER.error(exception.getMessage()) 和 LOGGER.error(exception.getMessage(), exception) 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71064636/

相关文章:

java - 使用 JMSAppender log4j2 每秒发送 2000 条消息

java - JMS 1.1 : Load sharing client side for Point-to-Point mode

java - 有没有办法改进这个切入点?

java - 如何使用 springmvc 作为 Controller 渲染对 jsf 页面的 ajax 响应

spring - 如何在 Angular 6 中使用 webSocket

java - 单元测试之间数据库未删除

tomcat - log4j2 为 FileAppender 指定 tomcat 主目录的相对路径

java - 为什么我可以使用 biginteger 变量获取 while 条件的过程

java - 获取同一个对象到Android ListView

java - Log4j2在java程序中断之前不会写入文件