2016-12-02 42 views
2

Я пытаюсь использовать приложение log4j для отправки журналов в GrayLog2 (log4j2-gelf). Поэтому я добавляю свою зависимость к моему pom.xml, чтобы настроить мой appender для настройки log4j2.xml. Постройте все с помощью maven и разверните его на локальном коте, и все будет хорошо. Проблема возникает, когда я пытаюсь выключить tomcat. Tomcat не останавливается, если я не kill -9 PID кота и 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? Что привело бы к этой проблеме? Я пытаюсь найти документацию по тому, как Tomcat отключился, но до сих пор я ничего не нашел, более того, я мог совершенно ошибаться в отношении этой диагностики ...

+0

Я делаю некоторые копания, и кажется, что я не могу воспроизвести проблему с Jetty, так что это похоже на проблему tomcat. – MaxouMask

ответ

3

Похоже, у вас есть ClassLoader проблема

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 остановка, обслуживающая входящий запрос на загрузку, когда он принимает сигнал выключения. Вам нужно, чтобы Netty jar был доступен за пределами WebappClassLoader. Поместите его на $CATALINA_HOME/lib (см. Tomcat classloader howto, section Common). Чтобы найти подходящую банку, запустите mvn dependency:tree для вашего веб-приложения (если вы используете maven)

+0

попробует это на Понедельник, держите вас psted, спасибо – MaxouMask

+0

Это исправляет проблему. Большое спасибо! – MaxouMask