无法找到Log4jConfigListener - 上下文无法启动

时间:2011-01-24 08:59:10

标签: java spring jsp web-applications tomcat6

我正在尝试在Eclipse上设置Web应用程序。我使用的是Tomcat 6.0和jdk 1.6.0_23。 出于某种原因,我收到了这个错误:

SEVERE: Error configuring application listener of class org.springframework.web.util.Log4jConfigListener
java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
 at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4078)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
 at org.apache.catalina.core.StandardService.start(StandardService.java:519)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Jan 24, 2011 11:44:08 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
 at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4078)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
 at org.apache.catalina.core.StandardService.start(StandardService.java:519)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

我检查了所有库是否已添加到构建路径中,一切似乎都正确。包含log4j-1.2.15.jar和所有必需的弹簧库。

我很困惑这个问题,特别是因为该项目在另一台计算机上工作正常。任何有关此问题的帮助都将受到高度赞赏。

Naftal

6 个答案:

答案 0 :(得分:39)

Reticulogic的第二个建议是正确的。但是,在Eclipse Helios中,已删除“Java EE模块依赖关系”选项。 Helios的修复方法如下:

  1. 在Eclipse中右键单击您的项目,然后转到属性 - >部署程序集
  2. 点击“添加...”
  3. 选择“Java Build Path Entries”并单击“Next”
  4. 选择“Maven Dependencies”并单击“完成”

答案 1 :(得分:4)

org.springframework.web.util.Log4jConfigListener类绝对不在您的类路径中。

我建议的第一件事是你将Tomcat中的日志记录级别 - 在conf文件夹中 - 调到“ALL”或“DEBUG”,这样你就可以看到容器里到底发生了什么。阻止找到这个类。

其次,如果在linux / mac上运行grep,我建议你检查你的JAR文件是否缺少类文件:

  # run at the root of your lib folders:
  grep -ri "org.springframework.web.util.Log4jConfigListener" *

上面的命令将返回包含该包的所有JAR文件。隔离JAR文件后,您可以进一步进行故障排除。

第三,确保您没有任何冲突。您的类路径中的多个版本的Log4j将造成严重破坏。如果有2个,系统应该如何知道哪个 org.springframework.web.util.Log4jConfigListener包加载? Tomcat有3个不同的类路径文件夹:

 shared/lib
 lib
 webapps/yourapp/WEB-INF/lib

确保您只在其中一个文件夹中只有一个log4j JAR文件。

答案 2 :(得分:3)

如果你正在使用maven和eclipse

1)查看您的Web项目.classpath文件。如果你有一个类路径条目“org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER”,那么确保该属性也存在。

<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
    <attributes>
        <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
    </attributes>
</classpathentry>

2)如果这不起作用,那么在eclipse中右键单击您的Web项目,然后转到Properties - &gt; JavaEE Module dependencies。确保选中Maven Dependencies框。

然后保存,构建部署yada yada

答案 3 :(得分:3)

一个简单的解决方案是清理Eclipse中的Tomcat目录。它对我有用。

答案 4 :(得分:2)

<块引用>

迁移到 log4j2?

不要忘记检查您的 webapp/WEB-INF/web.xml(Web 应用程序部署描述符)以获取无关的事件侦听器定义。

答案 5 :(得分:0)

如果你使用log4j2,你可以在

中找到这些类
org.apache.logging.log4j.web.*

包。