我正在嘗試使用log4j appender將日誌發送到GrayLog2(log4j2-gelf
)。所以我加我的依賴到我的pom.xml
配置log4j2.xml
來配置我的appender。用maven構建整個事物並將其部署到本地tomcat,並且一切正常。 當我嘗試關閉tomcat時發生問題。如果我不kill -9 PID
tomcat的 Tomcat不停止,catalina.out
與此結束:Complete stack traceJava Tomcat,底層Netty線程不停止
什麼了我的注意是
java.lang.NoClassDefFoundError: io/netty/util/concurrent/DefaultPromise$1
首先,我認爲我可以有另一種依賴進口網狀那會導致這個例外。但我尋找一些時間,無法找到任何其他netty導入。然後我看到:
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.
而這就是我的問題即將到來的地方。 我的理解是,gelf-appender使用Netty作爲與GrayLog服務器異步通信的一種方式。但它本身就是一臺服務器。那麼Tomcat是否有可能在殺死底層Netty之前停止父Servlet?這會導致這個問題? 我試圖找到關於Tomcat關機的方式的一些文檔,但到目前爲止我沒有找到任何東西,比我可以完全錯誤地關於此診斷...
我已經做了一些挖掘,我似乎無法重現與碼頭的問題,所以這看起來像一個tomcat的問題 – MaxouMask