Log4j2中Log4j1的OnlyOnceErrorHandler对等用法

nwlqm0z1  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(158)

在log4j 1中,我们可以将多个以逗号分隔的appenders传递给记录器,如下所示:

logger.name = log_level, appender1, appender2, appender3

如果其中一个追加器(比如说appender 1)将错误处理程序设置为OnlyOnceErrorHandler
然后,如果appender 1无法将输出记录到target,它将改为将问题记录到内部日志(仅第一次)。下次以后,它将表现为NOOP。
log4j 1中的配置示例(参考:

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
    <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
    <param name="Target" value="System.out"/>
    <param name="Threshold" value="WARN"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
    </layout>
</appender>

我想在Log4j 2中实现相同的错误处理行为。
根据this stackoverflow question,log4j 2提供了一个故障切换附加器,我认为这会有所帮助。但我无法理解它,这意味着我认为log4j 2中没有一种OOTB方式来使附加器像Log4j 1中具有OnlyOnceErrorHandler的Consoleappender一样工作。
故障转移附加器允许我们在主附加器失败/抛出时调用其他附加器,并允许在可配置的秒间隔后重试主附加器。但它并没有说它可以在n个异常后停止调用附加器。
有人能帮我解决这个问题吗?提前感谢!

zphenhs4

zphenhs41#

我一直在尝试解决同样的问题,我找到的最接近的问题是附加器上的“ignoreExceptions”参数。

  • OnlyOnceErrorHandler将记录System.err中来自追加程序的错误,仅记录一次,然后继续。
  • 'ignoreExceptions'参数会将错误记录到log4j日志中,仅记录一次,然后继续。
  • 因此,不同之处似乎在于记录附加器错误的位置,这是我们学会的。

不确定这是不是正确的答案--我想评论一下,发现我的声望点数不够:)
PS;有人提到使用FailoverAppender,我可以看到log4j 2中有一个ErrorHandler,但是我不知道如何让他们做OnlyOnceErrorHandler的工作。如果有更好的东西,我很乐意删除这个答案!

相关问题