有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java禁用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)
...........

在我的应用程序中是否有任何方法可以避免这种日志行为


共 (1) 个答案

  1. # 1 楼答案

    这可以通过appender上的ignoreExceptions标志进行设置:

    The default is true, causing exceptions encountered while appending events to be internally logged and then ignored. When set to false exceptions will be propagated to the caller, instead. You must set this to false when wrapping this Appender in a FailoverAppender.

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