log4j2-gelf
)。 我将依赖项添加到我的pom.xml
中并配置log4j2.xml
来配置我的appender。 使用maven构建整个项目并将其部署到本地tomcat上,一切都很好。问题出现在我尝试关闭tomcat时。如果我不使用
kill -9 PID
来终止tomcat,它就无法停止,并且catalina.out
会显示以下内容:完整的堆栈跟踪
引起我的注意的是:
起初,我以为可能有另一个依赖项导入了netty,从而导致此异常。但我寻找了一段时间,没有找到任何其他netty导入。然后我看到了这个:java.lang.NoClassDefFoundError: io/netty/util/concurrent/DefaultPromise$1
这就是我的问题所在。我理解gelf appender使用Netty作为一种与GrayLog服务器异步通信的方式。但它本身也是一个服务器。那么,是否有可能Tomcat在终止底层Netty之前停止了父servlet?这会导致这个问题吗?我一直在寻找一些关于Tomcat关闭方式的文档,但到目前为止我没有找到任何东西,更不用说我的诊断可能完全错误了。Caused by: java.lang.ClassNotFoundException: Illegal access: this web application instance has been stopped already. Could not load [io.netty.buffer.PoolArena$1]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.