使用自定义类加载器配置org.apache.log4j.ConsoleAppender

时间:2012-09-13 11:10:31

标签: java log4j classloader javassist

我有一个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".

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

提前致谢,
  阿夫纳

2 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:0)

在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>