Java 尝试在webapp中使用log4j时,使用log4j、commons日志和tomcat7获取NoClassDefFoundError

Java 尝试在webapp中使用log4j时,使用log4j、commons日志和tomcat7获取NoClassDefFoundError,java,log4j,tomcat7,classloader,apache-commons-logging,Java,Log4j,Tomcat7,Classloader,Apache Commons Logging,我正在做一个Java/J2EE项目,其中有几个Web应用程序。我想在一些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.LogConfigurat

我正在做一个Java/J2EE项目,其中有几个Web应用程序。我想在一些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……就像这里说的:)

我发现这个错误可能来自类加载器问题,因为第三方中包含commons.logging jar。事实上,当我在第三方中删除这个jar时,NoClassDefFoundError就消失了。([3rd party]/Bin/commons-logging-1.0.4.jar)

但是我不能从第三方移除这个罐子,它是在其他地方使用的

是否可以将commons日志配置为在加载时忽略log4j,或者是否有其他方法来克服这个类加载器问题


我尝试使用log4j-1.2.16.jar,第三方包含commons-logging-1.0.4.jar。我的log4j.properties文件是apache在上一个链接中建议的默认文件。

您需要重新阅读您引用的文档

引自


注意:当您想要将Tomcat重新配置为使用ApacheLog4j进行自己的日志记录时,需要执行本节中描述的步骤。如果您只想在自己的web应用程序中使用log4j,则不需要这些步骤。-在这种情况下,只需将log4j.jar和log4j.properties放入WEB应用程序的WEB-INF/lib和WEB-INF/class中


在proguard中添加以下定义。 这肯定会得到解决

-keep class com.amazonaws.org.apache.commons.logging.** { *; }

“只需将log4j.jar和log4j.properties放入WEB应用程序的WEB-INF/lib和WEB-INF/classes”我已经尝试过了,我得到了相同的错误,然后更新您的问题以反映这一点,并明确您所指的各种jar的位置。您认为我的问题现在可以了吗?