有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在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在上一个链接中建议的默认文件


共 (2) 个答案

  1. # 1 楼答案

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

    -keep class com.amazonaws.org.apache.commons.logging.** { *; }
    
  2. # 2 楼答案

    你需要重新阅读你引用的文件

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

    Note: The steps described in this section are needed when you want to reconfigure Tomcat to use Apache log4j for its own logging. These steps are not needed if you just want to use log4j in your own web application. — In that case, just put log4j.jar and log4j.properties into WEB-INF/lib and WEB-INF/classes of your web application.