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

问题描述 投票:0回答:1

Like in this picture

我知道它们都工作得很好,但我只是想知道它们有何不同? PS:我是初学者。

java spring log4j2 apache-commons java.util.logging
1个回答
3
投票

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 以抑制输出中的堆栈跟踪(请参阅 

alwaysWriteExceptions
文档中的
PatternLayout
),因此第二种形式总是更好,因为它提供了更多信息。

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

LOGGER.error("An unexpected condition occurred while performing foo.", exception);
这样您就可以解释异常发生时的上下文:

[ERROR] - An unexpected condition occurred while performing foo. 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/:?]
    
© www.soinside.com 2019 - 2024. All rights reserved.