有没有人使用 Logstas Logback 编码器将 Tomcat 的访问日志作为 JSON 获得?
即使它应该是可能的(根据文档)我无法让它工作,我一直在与 Tomcat 的类路径地狱作斗争。即使我 100% 确定类必须存在于类路径中,Tomcat 仍在抛出 NoClassDefFoundErrors。它只是没有任何意义了......
我将所有必需的 JAR 放入 Tomcatslib/
目录,将它们添加到类路径并设置所需的每个配置文件(遵循多个官方和非官方教程)。
Tomcat 的日志 (catalina.out -> catalina.json) 与 Logstash Logback 编码器一起工作正常,但 Tomcat 的访问日志是一个完全不同的问题......
无论我尝试什么,每次都会导致其中之一:
NoClassDefFoundError: javax/servlet/ServletContainerInitializer
NoClassDefFoundError: org/apache/catalina/Lifecycle
ClassNotFoundException: ch.qos.logback.access.spi.IAccessEvent
通过 bin/setenv.sh 将 logback-access.jar(除了所有其他 logback/slf4j/logstash JAR)添加到类路径会破坏整个类路径(带有 的崩溃循环NoClassDefFoundError: org/apache/catalina/Lifecycle
)。在没有 logback-access.jar 的情况下添加所有其他 logback/slf4j/logstash JAR 工作正常(但后来导致ClassNotFoundException: ch.qos.logback.access.spi.IAccessEvent
但 Tomcat 在没有写入访问日志的情况下运行良好)......
我什至无法提供我当前的状态,因为我不知道最接近解决方案的最“正确”状态是什么......
如果有人将 Tomcat 的访问日志作为 JSON,请告诉我如何(即使您使用不同的编码器)。
已经花费了我几天的谷歌搜索、反复试验和我所有的神经......
更新
这是 Tomcat 的 Classpath 或 ClassLoading 非常完善且毫无意义的证明(使用 JVM 启动-verbose:class
),catalina.out
输出:
[Loaded ch.qos.logback.access.spi.IAccessEvent from file:/home/tomcat/tomcat_8.5.34/lib/logback-access-1.2.0.jar]
...
java.lang.ClassNotFoundException: ch.qos.logback.access.spi.IAccessEvent
...
该类必须加载到另一个上下文/Classpath/ClassLoader ...我不知道这是如何工作的...