IllegalStateException caused by logback 1.1.2

Hello, All! to prevent "AsynAppender thread leak" as described in http://jira.qos.ch/browse/LOGBACK-867 I use recommended in documentation http://logback.qos.ch/manual/appenders.html#AsyncAppender approach: public class LogbackShutdownHook implements ServletContextListener { // ... @Override public void contextDestroyed(ServletContextEvent sce) { logger.info("******* stop logger *******"); LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); loggerContext.stop(); } } web.xml: <listener> <listener-class>com.pb.ivrcgate.util.servlet.LogbackShutdownHook</listener-class> </listener> but this causes IllegalStateException in tomcat log: May 28, 2014 3:36:36 PM org.apache.catalina.loader.WebappClassLoader loadClass INFO: Illegal access: this web application instance has been stopped already. Could not load ch.qos.logback.core.status.WarnStatus. The eventual following java.lang.IllegalStateException at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1612) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at ch.qos.logback.classic.LoggerContext.noAppenderDefinedWarning(LoggerContext.java:175) at ch.qos.logback.classic.Logger.callAppenders(Logger.java:267) at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:442) at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:396) at ch.qos.logback.classic.Logger.log(Logger.java:788) at org.apache.commons.logging.impl.SLF4JLocationAwareLog.debug(SLF4JLocationAwareLog.java:133) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.shutdown(PoolingHttpClientConnectionManager.java:345) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.finalize(PoolingHttpClientConnectionManager.java:168) at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method) at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:101) at java.lang.ref.Finalizer.access$100(Finalizer.java:32) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:190) in my webapp org.apache.httpcomponents:httpclient:4.3.3 used. sourse PoolingHttpClientConnectionManager.java line #345 is: this.log.debug("Connection manager is shutting down"); ============================================================== how to prevent IllegalStateException in tomcat log? I am doing something wrong, or this is bug in logback code? 1) may be method shutdown() should be added to logback, and after shutdown - all events and messages should be silently ignored? 2) or better add to logback new "fallback mode" - in this mode all async appenders should be stopped and all buffers disabled, all events written to logs and flushed immediately, without delays. "fallback mode" can be used in contextDestroyed() methods or in low memory conditions, before near OutOfMemoryError to prevent any logging events lost in buffers and queues. 3) ................................... something else? -- Best regards, Gena

Hi, You could try this; make a list of the classes that the tomcat classload refuses to load. Then make sure they get loaded at startup. Thanks David -- View this message in context: http://logback.10977.n7.nabble.com/IllegalStateException-caused-by-logback-1... Sent from the Users mailing list archive at Nabble.com.
participants (2)
-
diroussel
-
Gena Makhomed