导致错误递归调用追加程序。有办法解决吗?

时间:2020-06-23 13:06:41

标签: java spring-boot log4j2

发生以下错误消息。

ERROR Recursive call to appender file_appender

Log4j2-AppenderControl.isRecursiveCall()

@PerformanceSensitive
private boolean isRecursiveCall() {
    if (recursive.get() != null) {
        appenderErrorHandlerMessage("Recursive call to appender ");
        return true;
    }
    return false;
}

我什至找到了上面的代码。有什么办法可以解决发生的错误?

任何帮助将不胜感激。


http://apache-logging.6191.n7.nabble.com/Recursive-call-to-appender-stackoverflow-error-td60433.html

https://issues.apache.org/jira/browse/LOG4J2-2738


log4j2.xml

<Appenders>
    <Routing>    
        <Routes>
            <Route>  
                <RolingFile ... >
            </Route>  
        </Routes>
    </Routing>
</Appenders>

追加程序中的常规日志记录可能会创建无限递归,Log4j会检测到该递归并导致递归事件被忽略。

https://logging.apache.org/log4j/log4j-2.2/manual/configuration.html

如果status属性设置为error,则仅将错误消息写入控制台。这样可以排除配置错误。例如,如果将上述配置更改为将状态设置为error并且记录器声明为:

<logger name="EventLogger" level="info" additivity="false">
  <AppenderRef ref="Routng"/>
</logger>

1 个答案:

答案 0 :(得分:1)

当应用程序尝试记录某些东西,事件被路由到一个附加程序,该附加器尝试记录某事并且该事件被路由回到同一附加器时,会发生此错误。这可能会导致无限循环,从而导致堆栈溢出异常。相反,Log4j会检测到并阻止它。避免这种情况的方法是为导致问题的事件添加一个记录器,然后禁用它们或将其路由到其他附加程序。