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