禁用 log4j 2 异常(apache 的执行)



事实证明,log4j2有时可能不安全。记录消息可能会引发异常,从而破坏功能。我认为这不是理想的日志行为 - 日志记录应该失败而不会崩溃功能。这是一个基本示例:

InstrumentedAppender = new InstrumentedAppender (..);
appender.start();
...
appender.stop();
final Logger logger = LogManager.getLogger("LOG4J_TEST");
try {
logger.error("TEST_ERROR");
} catch (Exception e){
System.out.println("-------------- Exception is thrown");
e.printStackTrace()
}

在我的输出中,我得到这个:

org.apache.logging.log4j.core.appender.AppenderLoggingException: Attempted to append to non-started appender org.apache.logging.log4j.core.Appender
at org.apache.logging.log4j.core.config.AppenderControl.handleError(AppenderControl.java:142)
at org.apache.logging.log4j.core.config.AppenderControl.ensureAppenderStarted(AppenderControl.java:135)
at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:127)
at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:448)
at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:433)
at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:417)
...........

有什么方法可以避免我的应用程序中的这种日志行为吗?

这可以使用追加器上的 ignoreExceptions 标志进行设置:

默认值为 true,导致在内部记录附加事件时遇到的异常,然后忽略。设置为 false 时,异常将传播到调用方。将此追加程序包装在故障转移追加器中时,必须将其设置为 false。

https://logging.apache.org/log4j/2.x/manual/appenders.html

最新更新