在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
个异常后停止调用附加器。
有人能帮我解决这个问题吗?提前感谢!
1条答案
按热度按时间zphenhs41#
我一直在尝试解决同样的问题,我找到的最接近的问题是附加器上的“ignoreExceptions”参数。
不确定这是不是正确的答案--我想评论一下,发现我的声望点数不够:)
PS;有人提到使用FailoverAppender,我可以看到log4j 2中有一个ErrorHandler,但是我不知道如何让他们做OnlyOnceErrorHandler的工作。如果有更好的东西,我很乐意删除这个答案!