我正在开发一个包含多个webapps的Java / J2EE项目 . 我想在一些webapps中介绍log4j . 所以我在WEB-INF \ lib中添加了log4j-1.2.16.jar,在WEB-INF \ classes中添加了log4j.properties
结果我得到 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.logging jar . 确实,当我在第三方中删除此jar时,NoClassDefFoundError消失 . ([第三方] /Bin/commons-logging-1.0.4.jar) .
但我不能从第三方移除 jar ,它在其他地方使用 .
是否可以配置公共日志记录以在加载时忽略log4j,或者是否有其他方法可以克服此类加载器问题?
我尝试使用log4j-1.2.16.jar,第三方包含commons-logging-1.0.4.jar . 我的log4j.properties文件是上一个链接中apache建议的默认文件 .
2 回答
您需要重新阅读所引用的文档 .
引用http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j
在proguard中添加以下定义 . 这肯定会被修复