首页 > 解决方案 > HTTP 状态 404 - 使用 log4j 应用日志轮换后未找到

问题描述

我正在尝试在 Tomcat 8.5 中进行日志轮换。我通过引用 URL https://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j来遵循 log4j 过程。但是按照 URL 中提到的过程后,我无法打开 localhost,它给出 404 错误,日志如下所示。谁能帮我解决这个问题?

"ERROR org.apache.catalina.core.ContainerBase- ContainerBase.addChild: start: 
    org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
        at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
        at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1125)
        at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1858)
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.NoClassDefFoundError: org/apache/juli/WebappProperties
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4943)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
        ... 10 more
    Caused by: java.lang.ClassNotFoundException: org.apache.juli.WebappProperties
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 23 more"

标签: tomcattomcat8tomcat-juli

解决方案


您正在查看 Tomcat 7.0 的文档。您的版本的文档可在此处获得。

您为 Tomcat 7.0 下载的tomcat-juli-extras内容不适用于 Tomcat 8.5,并且没有tomcat-juli-extras为 Tomcat 8.5 提供。在 Tomcat 8.5 中不再需要(并且可能)物理替换默认的 JULI 实现。

恢复tomcat-juli.jarTomcat 附带的以解决错误。

如果要将 Log4j2 作为服务器的日志系统,请按照Log4j2 文档中的说明进行操作。基本上你需要:

  1. 为 Log4j2 库和配置创建一个文件夹。让我们说$CATALINA_BASE/log4j/lib$CATALINA_BASE/log4j/conf
  2. 下载log4j-apilog4j-core并且log4j-appserver(后者包含日志 API 的实现tomcat-juli.jar)到log4j/lib
  3. 将您喜欢的格式的配置文件添加到log4j/conf(参见文档),
  4. 将第 2 点中的三个库和log4j/conf文件夹添加到服务器的系统类加载器。这一步取决于你如何启动 Tomcat。如果您使用catalina.sh/startup.sh(在 Unix 上)添加到$CATALINA_BASE/setenv.sh(必要时创建它):
CLASSPATH="$CATALINA_BASE/log4j/lib/*.jar:$CATALINA_BASE/log4j/conf"
  1. 重新启动服务器。

推荐阅读