Сообщение об ошибке "Нет доступных приложений для AsyncAppender ASYNC" во время миграции log4j 1.x в 2.x
Я получаю сообщение об ошибке "Исключение в потоке"main" java.lang.ExceptionInInitializerError, вызванное: org.apache.logging.log4j.core.config.ConfigurationException: нет доступных приложений для AsyncAppender ASYNC'при миграции из log4j1.x в log4j 2.x с использованием моста Log4j 1.x согласно https://logging.apache.org/log4j/2.x/manual/migration.html.
Я пытался добавить приложение "CONSOLE" в appender-ref приложения "ASYNC", но у меня не получилось (ссылка: https://issues.apache.org/jira/browse/LOG4J2-894)
Полная трассировка стека:
Исключение в потоке "main" java.lang.ExceptionInInitializerError. Вызвано: org.apache.logging.log4j.core.config.ConfigurationException: для AsyncAppender ASYNC нет доступных приложений для org.apache.logging.log4j.core.appender.AsyncAppender. начать (AsyncAppender.java:117) с org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:255) с org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:530) в org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:603) в org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:620) в org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:226) в org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152) в org.apache.logging.imp4j.core.Log4jContextFactory.getContext(Log4jContextFactory.java:45) в org.apache.logging.log4j.LogManager.getContext(LogManager.java:307) в org.apache.log4j.LogManager$PrivateManager.getContext(LogManager.java:215) в org.apache.log4j.LogManager.getLogger(LogManager.java:74) в org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.j.sg:73:j.s::).LoggerFactory.getLogger(LoggerFactory.java:277) в org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) в org.apache.commons.logging.impl.SLF4JJjF:132) в org.apache.commons.logging.LogFactory.getLog(LogFactory.java:657) в org.springframework.context.support.AbstractApplicationContext.(AbstractApplicationContext.java:159) в org.springframework.ortteApp.apptextApp.(AbstractApplicationContext.java:223) в org.springframework.context.support.AbstractRefreshableApplicationContext.(AbstractRefreshableApplicationContext.java:88) в org.springframework.context.support.Abstract.prof.conf.conf..support.AbstractXmlApplicationContext (. sm.common.business.security.StrongMailSymmetricEncryptionUtility. (StrongMailSymmetricEncryptionUtility.java:53)
** Мой log4j2.xml **:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Async name="ASYNC">
<AppenderRef ref="R"/>
<AppenderRef ref="CONSOLE"/>
</Async>
<Async name="ASYNC_WARN">
<ThresholdFilter level="WARN"/>
<AppenderRef ref="R"/>
<AppenderRef ref="CONSOLE"/>
</Async
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%t] %C{2} - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="com.sm" level="WARN" additivity="false">
<AppenderRef ref="ASYNC"/>
</Logger>
<Logger name="com.sm.random" level="WARN" additivity="false">
<AppenderRef ref="ASYNC_WARN"/>
</Logger>
<Logger name="com.sm.services" level="WARN" additivity="false">
<AppenderRef ref="ASYNC"/>
</Logger>
<Root level="WARN">
<AppenderRef ref="ASYNC"/>
</Root>
</Loggers>
</Configuration>
Благодарю.
2 ответа
Это исключение может быть вызвано несколькими причинами. Ниже приведены некоторые из них:
1) В проекте или внутри используемого вами jar-файла есть дублированная конфигурация log4j
2) В файл log4j не добавлено никаких дополнений
3) Если добавляющие добавлены правильно, конфликтуют две или более конфигурации log4j.
В моем случае это происходило из-за двух настроенных файлов log4j2.xml.
В моем случае это произошло из-за отказа в доступе к каталогу журнала
<Async name="ASYNC">...
appender должен быть определен после Appenders, на которые он ссылается. Например, консольный приложение определяется после приложения Async; это должно быть раньше.
Кроме того, приложение Async имеет <AppenderRef ref="R"/>
это относится к несуществующему приложению с именем R. Вам нужно либо удалить этот AppenderRef, либо определить приложение.