我有一个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".
问题与以下事实有关:一个对象是由原始类加载器创建的,而另一个是由自定义类加载器创建的。
有没有办法解决这个错误?
提前致谢,
阿夫纳
答案 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>