【发布时间】:2014-04-16 18:20:55
【问题描述】:
我正在开发一个包含多个 web 应用程序的 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 jars ......就像这里所说的:http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j)
我发现该错误可能来自类加载器问题,因为第 3 方中包含一个 commons.logging jar。事实上,当我在第 3 方删除这个 jar 时,NoClassDefFoundError 消失了。 ([第 3 方]/Bin/commons-logging-1.0.4.jar)。
但是我不能把罐子从第 3 方拿走,它是在别处使用的。
是否可以将公共日志配置为在加载时忽略 log4j,或者是否有其他方法可以解决这个类加载器问题?
我尝试使用log4j-1.2.16.jar,第3方包含commons-logging-1.0.4.jar。我的 log4j.properties 文件是 apache 在上一个链接中建议的默认文件。
【问题讨论】:
标签: java log4j tomcat7 classloader apache-commons-logging