【问题标题】:Disable log4j 2 exceptions (apache's exeptions)禁用 log4j 2 异常(apache 异常)
【发布时间】:2018-08-23 07:10:18
【问题描述】:

事实证明,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)
...........

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

【问题讨论】:

    标签: java exception exception-handling log4j log4j2


    【解决方案1】:

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

    默认值为 true,导致在附加事件时遇到的异常被内部记录,然后被忽略。当设置为 false 时,异常将被传播给调用者。将此 Appender 包装在 FailoverAppender 中时,必须将其设置为 false。

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

    【讨论】:

    • FailoverAppender 似乎在 log4j2 中存在错误,仍未解决 issues.apache.org/jira/browse/LOG4J2-1163。此外,我问我如何才能只删除他们的例外,而不是我的。我需要查看我的异常,但我不希望他们的异常破坏一切......
    • 如果我理解正确你正在实现 Appender 接口,这个接口有一个方法 ignoreException()。如果您希望忽略内部异常,则需要在该方法中返回 false。
    • 其实我使用的是 log4j 实现的 InstrumentedAppender,只是编辑了帖子...
    • 如果你引用这个类metrics.dropwizard.io/3.1.0/apidocs/log4j2/…,可以在构造函数中设置ignoreExceptions标志
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2019-10-25
    • 1970-01-01
    • 2013-03-24
    • 2022-01-18
    • 2012-02-22
    相关资源
    最近更新 更多