【问题标题】:Configure org.apache.log4j.ConsoleAppender with custom classloader使用自定义类加载器配置 org.apache.log4j.ConsoleAppender
【发布时间】:2012-09-06 11:06:11
【问题描述】:

我有一个 java 类,它在启动时基于 javassist 类加载器创建一个自定义类加载器,然后运行真正的程序类。 我收到以下错误:

log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a        
"org.apache.log4j.Appender" variable.
log4j:ERROR The class "org.apache.log4j.Appender" was loaded by 
log4j:ERROR [javassist.Loader@6f97b10a] whereas object of type 
log4j:ERROR "org.apache.log4j.ConsoleAppender" was loaded by 
[java.net.URLClassLoader@5b414a8d].
log4j:ERROR Could not instantiate appender named "stdout".

问题与一个对象是由原始类加载器创建的,而另一个是由自定义类加载器创建的这一事实有关。
有没有办法解决这个错误?

提前致谢,
阿夫纳

【问题讨论】:

    标签: java log4j classloader javassist


    【解决方案1】:

    请尝试设置-Dlog4j.ignoreTCL=true,希望对您有所帮助。一个类似的问题about log4j

    【讨论】:

    • 工作就像一个魅力;-) 谢谢
    • 仍然对我不起作用 :(。我使用 io.sentry:sentry-log4j2 但会回退到 io.sentry:sentry-log4j 代替。
    【解决方案2】:

    在maven tomcat插件配置中添加log4j.ignoreTCL如下图

    <plugin>
       <groupId>org.apache.tomcat.maven</groupId>
       <artifactId>tomcat7-maven-plugin</artifactId>
       <version>2.1</version>
       <configuration>
          <port>${local.server.port}</port>
          <update>true</update>
          <systemProperties>
             <log4j.configurationFile>${user.dir}\conf\log4j2.xml</log4j.configurationFile>
             <log4j.ignoreTCL>true</log4j.ignoreTCL>
             <java.util.logging.manager>org.apache.logging.log4j.jul.LogManager</java.util.logging.manager>
          </systemProperties>
          <contextReloadable>true</contextReloadable>
       </configuration>
    </plugin>
    

    【讨论】:

      猜你喜欢
      • 2023-02-07
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 2010-10-05
      • 2016-03-27
      • 2023-03-07
      相关资源
      最近更新 更多