Появилось следующее сообщение об ошибке.

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

Если для атрибута состояния установлено значение error, в консоль будут записываться только сообщения об ошибках. Это делает возможным устранение ошибок конфигурации. Например, если приведенная выше конфигурация была изменена так, чтобы статус был установлен на ошибку, а объявление регистратора было таким:

<logger name="EventLogger" level="info" additivity="false">
  <AppenderRef ref="Routng"/>
</logger>
4
0gam 23 Июн 2020 в 16:06

1 ответ

Лучший ответ

Эта ошибка возникает, когда приложение пытается что-то записать, событие перенаправляется приложению, приложение пытается что-то записать, и это событие перенаправляется обратно тому же приложению. Это может закончиться бесконечным циклом, который вызовет исключение переполнения стека. Вместо этого Log4j это обнаруживает и предотвращает. Способ избежать этого - добавить регистратор событий, вызывающих проблему, и либо отключить их, либо направить их другому приложению.

2
rgoers 23 Июн 2020 в 16:18