【发布时间】:2016-12-02 11:09:51
【问题描述】:
我正在尝试使用 log4j appender 将日志发送到 GrayLog2 (log4j2-gelf)。所以我将我的依赖添加到我的pom.xml 配置log4j2.xml 来配置我的appender。用maven构建整个东西并将其部署到本地tomcat,一切正常。
当我尝试关闭 tomcat 时会出现问题。
如果我不 kill -9 PID tomcat 和 catalina.out 结束,Tomcat 不会停止:Complete stack trace
引起我注意的是
java.lang.NoClassDefFoundError: io/netty/util/concurrent/DefaultPromise$1
首先我认为我可能有另一个依赖导入 netty 会导致此异常。但我找了一段时间,没能找到任何其他的净进口。然后我看到了:
原因:java.lang.ClassNotFoundException:非法访问:此网站 应用程序实例已经停止。不能加载 [io.netty.buffer.PoolArena$1]。抛出以下堆栈跟踪 调试目的以及尝试终止线程 导致非法访问。
这就是我的问题所在。 我的理解是 gelf-appender 使用 Netty 作为与 GrayLog 服务器异步通信的一种方式。但它本身就是一个服务器。那么Tomcat是否有可能在杀死底层Netty之前停止父servlet?哪个会导致这个问题? 我试图找到一些关于 Tomcat 关闭方式的文档,但到目前为止我没有找到任何东西,除了这个诊断我可能完全是错误的......
【问题讨论】:
-
我正在挖掘,似乎无法重现 Jetty 的问题,所以这看起来像是一个 tomcat 问题
标签: java multithreading tomcat log4j2 graylog2