首页 文章

在webapp中尝试使用log4j时,使用log4j,commons logging和tomcat 7获取NoClassDefFoundError

提问于
浏览
0

我正在开发一个包含多个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 回答

  • 0

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

    引用http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j

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

  • 0

    在proguard中添加以下定义 . 这肯定会被修复

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

相关问题