原因错误 递归调用附加程序。有办法解决吗?

问题描述 投票:0回答:1

出现以下错误消息。

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;
}

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

任何帮助将不胜感激。


我发现一些问题。

消息“错误递归调用附加程序”需要更多诊断信息。 - 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

如果状态属性设置为错误,则只有错误消息才会写入控制台。这使得排除配置错误成为可能。例如,如果将上面的配置更改为将状态设置为错误,并且记录器声明为:

<logger name="EventLogger" level="info" additivity="false">
  <AppenderRef ref="Routng"/>
</logger>
java spring-boot log4j2
1个回答
8
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.