导致 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。有没有办法解决它?的主要内容,如果未能解决你的问题,请参考以下文章

***Error 啥时候发生? [复制]

递归&时间模块&os模块

递归调用太深,可能导致栈溢出

为啥递归调用会导致不同堆栈深度的 ***?

递归调用中的错误“[Error] 表达式列表被视为初始化程序 [-fpermissive] 中的复合表达式”

由于递归方法调用导致 Java 堆栈溢出