【问题标题】:Tomcat 7 - java.lang.NoClassDefFoundError: org/apache/log4j/spi/ThrowableInformationTomcat 7 - java.lang.NoClassDefFoundError: org/apache/log4j/spi/ThrowableInformation
【发布时间】:2012-03-26 12:55:49
【问题描述】:

我面临以下异常:

Mar 26, 2012 1:20:34 PM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already.  
Could not   load org.apache.log4j.spi.ThrowableInformation.  
The eventual following stack trace is caused by an error thrown for debugging purposes 
as well as to attempt to terminate the thread which caused the illegal access, and has  
no functional impact.
java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1562)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
at org.apache.log4j.spi.LoggingEvent.<init>(LoggingEvent.java:165)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.error(Category.java:322)
at com.abc.supervisionmanager.Monitoring.run(Monitoring.java:205)
at java.lang.Thread.run(Thread.java:662)
Exception in thread "Thread_Monitoring" java.lang.NoClassDefFoundError: org/apache/log4j/spi/ThrowableInformation
at org.apache.log4j.spi.LoggingEvent.<init>(LoggingEvent.java:165)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.error(Category.java:322)
at com.abc.supervisionmanager.Monitoring.run(Monitoring.java:205)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.spi.ThrowableInformation
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
... 5 more

我用谷歌搜索了这个异常,发现大多数答案都指出它是 tomcat 5.5 中的错误,它将在 5.5.28 版本中解决。

但是我目前正在使用带有 log4j-1.2.16.jar 的 tomcat 7.11,但我仍然面临同样的问题。

【问题讨论】:

标签: java log4j tomcat7


【解决方案1】:

对我来说,这个问题的解决方案(使用 Openbravo 3.0MP11 和 Tomcat 7.0.21 测试)是:

  1. WEB-INF/lib 中删除log4j-1.2.16.jar
  2. 将 log4j jar 放到 Tomcat 的 lib 目录中。在 Ubuntu 11.10 中,这将是 /usr/share/tomcat7/lib

注意我的 Openbravo 特定用例:这确实解决了 log4j 问题,但后来我遇到了其他问题。

【讨论】:

  • 您是否删除了任何其他 log4j jar?
【解决方案2】:

听起来是您的库有问题。你确定你的 webapp 的 WEB-INF/lib 文件夹中有 Log4J jar 文件吗?

【讨论】:

  • 是的,我在 'my-webapplication\WEB-INF\lib\' 下有 log4j-1.2.16.jar
  • 在 Weblogic 中有同样的问题。我怀疑 weblogic 的 log4j 库和我的应用程序之间存在冲突,但即使使用 weblogic.xml 的 weblogic 的 prefer-application-packages 部分也无法清除它。我在尝试使用 Spring MVC 时遇到了它。
  • 我遇到了同样的问题,试图在 Tomcat 7.0.21 下运行 Openbravo 3.0MP11。我尝试在 /var/lib/tomcat7/shared、/var/lib/tomcat7/shared/lib、/usr/share/tomcat7/lib 下添加 log4j ......没有任何效果:(
  • Openbravo 还在 ./WEB-INF/lib/log4j-1.2.16.jar 下提供了自己的 log4j
  • 拥有多个 log4j jar 是如何导致它找不到类的,有人知道吗?
【解决方案3】:

如何解决。对我来说:

  1. try {} catch() log4j 异常抛出。
  2. 再次运行tomcat,找出真正的问题
  3. 解决真正的问题,删除try{} catch()

log4j 和 tomcat 都没有问题。它会抛出异常,因为您的某些代码在 webapp init 中运行错误。也许 xml 或 config 是错误的。

【讨论】:

  • 是的。这个有可能。这可能是原因之一。 +1
【解决方案4】:

我在使用 portlet(liferay 6.2 Tomcat bundle)时遇到了这个问题。我通过删除导致异常的部署(在 tomcat webapps 文件夹中)、清理和重新部署(使用 maven -- liferay:deploy)portlet 来修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多