2016-12-02 3 views
2

Ich versuche, einen log4j Appender zu verwenden Protokolle GrayLog2 zu senden (log4j2-gelf). Also ich meine Abhängigkeit zu meiner pom.xml configure hinzufügen log4j2.xml meiner appender zu konfigurieren. Baue das Ganze mit Maven auf und stelle es einem lokalen Kater zur Verfügung, und alles funktioniert gut. Das Problem passiert, wenn ich versuche, den Tomcat herunterzufahren. Tomcat nicht zu stoppen, wenn ich nicht kill -9 PID den Kater und die catalina.out endet mit auf den Punkt: Complete stack traceJava Tomcat, zugrunde liegende Netty Threads gestoppt nicht

Was meine Aufmerksamkeit bekam die

java.lang.NoClassDefFoundError: io/netty/util/concurrent/DefaultPromise$1

Zuerst dachte ich, dass ich eine andere Abhängigkeit netty importieren kann das würde diese Ausnahme verursachen. Aber ich habe nach etwas Zeit gesucht und konnte keinen anderen Netto-Import finden. Dann sah ich:

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.

Und das ist, wo meine Frage kommt. Mein Verständnis ist, dass die GELF-appender verwendet Netty als eine Möglichkeit, asynchron mit dem GrayLog Server zu kommunizieren. Aber es ist ein Server selbst. Wäre es also möglich, dass der Tomcat das übergeordnete Servlet stoppt, bevor er die zugrunde liegende Netty zerstört? Was würde zu diesem Problem führen? Ich habe versucht, einige Informationen über die Art und Weise zu finden, dass Tomcat herunterfährt, aber bis jetzt habe ich nichts gefunden, mehr als das könnte ich vollkommen falsch liegen in Bezug auf diese Diagnose ...

+0

Ich habe einige graben und es scheint, dass ich das Problem mit Jetty nicht reproduzieren kann, so sieht dies aus wie ein Tomcat Problem – MaxouMask

Antwort

3

Es sieht so aus, als ob Sie einen ClassLoader haben Problem

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. at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1342)

WebappClassLoader Anschläge eingehende Anforderung dient, zu laden, wenn es Abschaltsignal empfängt. Sie müssen Netty Glas zugänglich sein über WebappClassLoader. Legen Sie es auf $CATALINA_HOME/lib (siehe Tomcat classloader howto, section Common). Um das richtige Glas zu finden, führen Sie mvn dependency:tree für Ihre Webapp (wenn Sie maven verwenden)

+0

wird dies versuchen montag, halt dich pted, danke – MaxouMask

+0

Es behebt das Problem. Vielen Dank Kumpel! – MaxouMask

Verwandte Themen