Сообщение об ошибке "Нет доступных приложений для 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, либо определить приложение.

Другие вопросы по тегам