tomcat - 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"
解决方案
您正在查看 Tomcat 7.0 的文档。您的版本的文档可在此处获得。
您为 Tomcat 7.0 下载的tomcat-juli-extras
内容不适用于 Tomcat 8.5,并且没有tomcat-juli-extras
为 Tomcat 8.5 提供。在 Tomcat 8.5 中不再需要(并且可能)物理替换默认的 JULI 实现。
恢复tomcat-juli.jar
Tomcat 附带的以解决错误。
如果要将 Log4j2 作为服务器的日志系统,请按照Log4j2 文档中的说明进行操作。基本上你需要:
- 为 Log4j2 库和配置创建一个文件夹。让我们说
$CATALINA_BASE/log4j/lib
和$CATALINA_BASE/log4j/conf
。 - 下载
log4j-api
,log4j-core
并且log4j-appserver
(后者包含日志 API 的实现tomcat-juli.jar
)到log4j/lib
, - 将您喜欢的格式的配置文件添加到
log4j/conf
(参见文档), - 将第 2 点中的三个库和
log4j/conf
文件夹添加到服务器的系统类加载器。这一步取决于你如何启动 Tomcat。如果您使用catalina.sh/startup.sh
(在 Unix 上)添加到$CATALINA_BASE/setenv.sh
(必要时创建它):
CLASSPATH="$CATALINA_BASE/log4j/lib/*.jar:$CATALINA_BASE/log4j/conf"
- 重新启动服务器。
推荐阅读
- php - 如何在 Drupal 8 中以编程方式禁用分页
- delphi - 发送多个附件 firemonkey
- html - 如何在透明 div 中制作非透明元素
- vba - 无法在我们的 Windows Server 上打开 Access 数据库文件,但在本地没有问题
- reactjs - 第一次单击时 FlatList renderItem 未突出显示
- python-3.x - 在熊猫列表中删除括号和撇号的优雅方式
- pytorch - 如何在 PyTorch 中以特定的新维度重复张量
- mysql - 如何更新表设置从另一个表中选择的位置?
- sql - 这个 SSRS 开关表达式我做错了什么?
- python - ConnectionResetError: [WinError 10054] 将网站读入 Pandas 时