在webapp中尝试使用log4j时,java get-NoClassDefFoundError与log4j、commons日志和tomcat 7一起出现错误
我正在做一个Java/J2EE项目,其中有几个Web应用程序。我想在一些webapps中介绍log4j。 所以我添加了log4j-1.2.16。WEB-INF\lib中的jar和log4j。WEB-INF\classes中的属性
因此,我得到一个NoClassDefFoundError:
org.apache.commons.logging.LogConfigurationException:org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@f8f541 for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category) (Caused by org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@f8f541 for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category))
at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:543)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
当我试图直接在Tomcat内部安装log4j时,我也会遇到同样的错误。 (我已经在tomcat/lib等中添加了propers jar,就像这里说的:http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j)
我发现这个错误可能是由类加载器问题引起的,因为有一个commons。第三方中包含的日志记录jar。事实上,当我在第三方中删除这个jar时,NoClassDefFoundError就消失了。([3rd party]/Bin/commons-logging-1.0.4.jar)
但是我不能从第三方移除这个罐子,它是在其他地方使用的
是否可以将commons日志配置为在加载时忽略log4j,或者是否有其他方法来克服这个类加载器问题
我尝试使用log4j-1.2.16。jar,第三方包含commons-logging-1.0.4。罐子我的log4j。属性文件是apache在上一个链接中建议的默认文件
# 1 楼答案
在proguard中添加以下定义。 这肯定会得到解决
# 2 楼答案
你需要重新阅读你引用的文件
引自http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j