简体   繁体   English

log4j 1.x 到 2.x 迁移时出现错误“没有可用于 AsyncAppender ASYNC 的附加程序”

[英]getting error 'No appenders are available for AsyncAppender ASYNC' while log4j 1.x to 2.x migration

I am getting error 'Exception in thread "main" java.lang.ExceptionInInitializerError Caused by: org.apache.logging.log4j.core.config.ConfigurationException: No appenders are available for AsyncAppender ASYNC' while migrating from log4j1.x to log4j 2.x using the Log4j 1.x bridge as per https://logging.apache.org/log4j/2.x/manual/migration.html .从 log4j1.x 迁移到 log4j 2 时,我收到错误“线程“main”java.lang.ExceptionInInitializerError 中的异常:org.apache.logging.log4j.core.config.ConfigurationException:AsyncAppender ASYNC 没有可用的附加程序.x 根据https://logging.apache.org/log4j/2.x/manual/migration.html使用 Log4j 1.x 网桥。

I have tried to add 'CONSOLE' appender in appender-ref of 'ASYNC' appender but it didnt work for me.(reference : https://issues.apache.org/jira/browse/LOG4J2-894 )我试图在“ASYNC”附加程序的附加程序引用中添加“控制台”附加程序,但它对我不起作用。(参考: https : //issues.apache.org/jira/browse/LOG4J2-894

Complete stack trace :完整的堆栈跟踪:

Exception in thread "main" java.lang.ExceptionInInitializerError Caused by: org.apache.logging.log4j.core.config.ConfigurationException: No appenders are available for AsyncAppender ASYNC at org.apache.logging.log4j.core.appender.AsyncAppender.start(AsyncAppender.java:117) at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:255) at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:530) at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:603) at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:620) at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:226) at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152) at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45) at org.apache.logging.log4j.LogManager.getContext(LogManager.java:307) at org.apache.log4j.LogMana线程“main”中的异常 java.lang.ExceptionInInitializerError 引起:org.apache.logging.log4j.core.config.ConfigurationException:在 org.apache.logging.log4j.core.appender.AsyncAppender 上没有可用于 AsyncAppender ASYNC 的附加程序。 start(AsyncAppender.java:117) at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:255) at 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.log4j.core.impl .Log4jContextFactory.getContext(Log4jContextFactory.java:45) 在 org.apache.logging.log4j.LogManager.getContext(LogManager.java:307) 在 org.apache.log4j.LogMana ger$PrivateManager.getContext(LogManager.java:215) at org.apache.log4j.LogManager.getLogger(LogManager.java:74) at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:277) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:657) at org.springframework.context.support.AbstractApplicationContext.(AbstractApplicationContext.java:159) at org.springframework.context.support.AbstractApplicationContext.(AbstractApplicationContext.java:223) at org.springframework.context.support.AbstractRefreshableApplicationContext.(AbstractRefreshableApplicationContext.java:88) at org.springframework.context.support.AbstractRefreshableConfigApplicationContext.(AbstractRefreshableConfigApplicationContext.java:58) at org.springframework.context.supp ger$PrivateManager.getContext(LogManager.java:215) at org.apache.log4j.LogManager.getLogger(LogManager.java:74) at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73) at org.slf4j .LoggerFactory.getLogger(LoggerFactory.java:277) 在 org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) 在 org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java :132) 在 org.apache.commons.logging.LogFactory.getLog(LogFactory.java:657) 在 org.springframework.context.support.AbstractApplicationContext.(AbstractApplicationContext.java:159) 在 org.springframework.context.support.AbstractApplicationContext .(AbstractApplicationContext.java:223) 在 org.springframework.context.support.AbstractRefreshableApplicationContext.(AbstractRefreshableApplicationContext.java:88) 在 org.springframework.context.support.AbstractRefreshableConfigApplicationContext.(AbstractRefreshableConfigApplicationContext.orgtext.java:58) 在.supp ort.AbstractXmlApplicationContext.(AbstractXmlApplicationContext.java:61) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:136) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83) at com.sm.common.business.security.StrongMailSymmetricEncryptionUtility.(StrongMailSymmetricEncryptionUtility.java:53) ort.AbstractXmlApplicationContext.(AbstractXmlApplicationContext.java:61) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:136) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83) at com. sm.common.business.security.StrongMailSymmetricEncryptionUtility.(StrongMailSymmetricEncryptionUtility.java:53)

**My log4j2.xml **: **我的 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>

Thanks.谢谢。

There could be multiple reason this exception occurs.发生此异常的原因可能有多种。 Below are some:下面是一些:

1) There are duplicate log4j configuration in the project or inside the dependent jar you are using 1)在项目中或者你使用的依赖jar里面有重复的log4j配置

2) No appenders added in log4j file 2) log4j 文件中没有添加 appender

3) If appenders are added correctly then two or more log4j configuration are clashing. 3) 如果正确添加了附加程序,则两个或多个 log4j 配置会发生冲突。

In my case, this was happening due to two log4j2.xml file was configured.就我而言,这是由于配置了两个 log4j2.xml 文件而发生的。

The <Async name="ASYNC">... appender should be defined after the Appenders that it references. <Async name="ASYNC">... appender 应该在它引用的 Appenders之后定义。 For example, the console appender is defined after the Async appender;例如,控制台 appender 定义在 Async appender 之后; it should be before.应该是之前。

Also, the Async appender has a <AppenderRef ref="R"/> that refers to a non-existing appender with name R. You need to either remove this AppenderRef or define the appender.此外,异步 appender 有一个<AppenderRef ref="R"/> ,它指的是一个名为 R 的不存在的 appender。你需要删除这个 AppenderRef 或定义 appender。

就我而言,这是由于日志目录访问权限被拒绝而发生的

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM