导致 ERROR 递归调用 appender。有没有办法解决它?
Posted
技术标签:
【中文标题】导致 ERROR 递归调用 appender。有没有办法解决它?【英文标题】:Cause ERROR Recursive call to appender. Is there a way to solve it? 【发布时间】:2020-10-13 13:24:03 【问题描述】:出现以下错误消息。
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-***-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
如果状态属性设置为错误,则只会将错误消息写入控制台。这使得故障排除配置错误成为可能。例如,如果将上面的配置更改为将状态设置为错误并且记录器声明为:
<logger name="EventLogger" level="info" additivity="false">
<AppenderRef ref="Routng"/>
</logger>
【问题讨论】:
【参考方案1】:当应用程序尝试记录某些内容时会发生此错误,该事件被路由到附加程序,附加程序尝试记录某些内容并且该事件被路由回同一个附加程序。这可能会导致导致堆栈溢出异常的无限循环。相反,Log4j 会检测到这一点并阻止它。避免这种情况的方法是为导致问题的事件添加一个记录器,然后禁用它们或将它们路由到不同的附加程序。
【讨论】:
以上是关于导致 ERROR 递归调用 appender。有没有办法解决它?的主要内容,如果未能解决你的问题,请参考以下文章