Vin*_*nod 5 java tomcat tomcat7
直到昨天,我的 Web 项目都运行良好,但是今天当我启动我的 tomcat 服务器 7 时,它无法在 Eclipse 中以以下错误启动:
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/CiscoQA_Automation_Framework]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
... 7 more
Caused by: java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.apache.catalina.startup.WebappServiceLoader.loadServices(WebappServiceLoader.java:192)
at org.apache.catalina.startup.WebappServiceLoader.load(WebappServiceLoader.java:157)
at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1577)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1281)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:889)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:386)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5419)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 7 more
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1722)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1573)
... 19 more
Run Code Online (Sandbox Code Playgroud)
在参考这里和其他几个链接之后,我清理了 WEB-INF/lib 和类路径,然后在 WEB-INF/lib 和类路径中添加了“log4j-web-2.3.jar”和“log4j-1.2.17.jar” . 我试过清理项目和 tomcat 工作目录,也没有任何效果。
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
<Listener className="org.apache.catalina.core.JasperListener"/>
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
Run Code Online (Sandbox Code Playgroud)
<Listener>您的自定义server.xml引用了一个静态依赖于 Log4j 的类,并且您没有将 Log4j jar 文件添加到 Tomcats 类路径,即添加到$TOMCAT_HOME/lib(或$TOMCAT_BASE/lib) 文件夹。
删除侦听器或添加缺少的 jar 文件。
更新
您说您添加了log4j-web-2.3.jar和log4j-1.2.17.jar,但错误消息显示org.apache.logging.log4j.Logger缺少 和 。
log4j-1.2.17.jar有一个org.apache.log4j.Logger,所以这是 Log4j 的错误版本。
log4j-web-2.3.jar包含一个Log4jServletContainerInitializerin 包org.apache.logging.log4j.web。只要 Tomcat 存在,它就会自动加载。这就是需要的类org.apache.logging.log4j.Logger。
org.apache.logging.log4j.Logger可以在 中找到log4j-api-2.3.jar,所以你需要这个文件,但它只是 API。您还需要log4j-core-2.3.jar,这是实际的 Log4J 2 实现。
如果您没有使用 Log4j 1 API 的代码,请删除log4j-1.2.17.jar. 如果您确实有使用旧 API 的代码,请将该文件替换为log4j-1.2-api-2.3.jar,这会将旧 API 调用重定向到新 API。这样就无需配置两者,并且无论使用什么 API 版本都允许使用单个日志文件。
摘要:您需要以下文件:
log4j-api-2.3.jarlog4j-core-2.3.jarlog4j-web-2.3.jarlog4j-1.2-api-2.3.jar (替换log4j-1.2.17.jar,仅在旧代码需要时添加)在此过程中,请升级到最新版本 (2.5)。
| 归档时间: |
|
| 查看次数: |
10877 次 |
| 最近记录: |