繁体   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

从 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 网桥。

我试图在“ASYNC”附加程序的附加程序引用中添加“控制台”附加程序,但它对我不起作用。(参考: https : //issues.apache.org/jira/browse/LOG4J2-894

完整的堆栈跟踪:

线程“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) 在 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)

**我的 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>

谢谢。

发生此异常的原因可能有多种。 下面是一些:

1)在项目中或者你使用的依赖jar里面有重复的log4j配置

2) log4j 文件中没有添加 appender

3) 如果正确添加了附加程序,则两个或多个 log4j 配置会发生冲突。

就我而言,这是由于配置了两个 log4j2.xml 文件而发生的。

<Async name="ASYNC">... appender 应该在它引用的 Appenders之后定义。 例如,控制台 appender 定义在 Async appender 之后; 应该是之前。

此外,异步 appender 有一个<AppenderRef ref="R"/> ,它指的是一个名为 R 的不存在的 appender。你需要删除这个 AppenderRef 或定义 appender。

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

暂无
暂无

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

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