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