LOGGER.error(exception.getMessage()) 和 LOGGER.error(exception.getMessage(), 异常) 有什么区别
What is the difference between LOGGER.error(exception.getMessage()) and LOGGER.error(exception.getMessage(), exception)
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/:?]
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/:?]