Alexandr Bolbat created LOGBACK-1469: ----------------------------------------
Summary: AsycAppender defined in configuration but not used in any logger is not stopping by shutdown hook Key: LOGBACK-1469 URL: https://jira.qos.ch/browse/LOGBACK-1469 Project: logback Issue Type: Improvement Components: logback-classic, logback-core Affects Versions: 1.2.3 Environment: Any environment Reporter: Alexandr Bolbat Assignee: Logback dev list Priority: Critical If we define 3 async appenders: {code:java} <appender name="ConsoleInfoAppenderAsync" class="ch.qos.logback.classic.AsyncAppender"> <queueSize>5000</queueSize> <discardingThreshold>0</discardingThreshold> <appender-ref ref="ConsoleInfoAppender" /> <includeCallerData>true</includeCallerData> </appender> <appender name="ConsoleDebugAppenderAsync" class="ch.qos.logback.classic.AsyncAppender"> <queueSize>5000</queueSize> <discardingThreshold>0</discardingThreshold> <appender-ref ref="ConsoleDebugAppender" /> <includeCallerData>true</includeCallerData> </appender> <appender name="ConsoleTraceAppenderAsync" class="ch.qos.logback.classic.AsyncAppender"> <queueSize>5000</queueSize> <discardingThreshold>0</discardingThreshold> <appender-ref ref="ConsoleTraceAppender" /> <includeCallerData>true</includeCallerData> </appender> ...{code} Then define loggers: {code:java} <logger name="some.package" level="DEBUG" additivity="true"> <appender-ref ref="ConsoleDebugAppenderAsync" /> <appender-ref ref="ConsoleInfoAppenderAsync" /> </logger> <root level="INFO"> <appender-ref ref="ConsoleInfoAppenderAsync" /> </root> {code} And shutdown hook: {code:java} <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook" /> {code} On application shutdown we will have executed stop for 2 appenders: {code:java} ConsoleDebugAppenderAsync ConsoleInfoAppenderAsync {code} And related threads would be stopped. But shutdown for third appender will be ignored (or just not executed): {code:java} ConsoleTraceAppenderAsync {code} In result their thread will exist and still working: {code:java} AsyncAppender-Worker-ConsoleTraceAppenderAsync {code} In case of web application deployed to tomcat we will see warning about this: {code:java} 14-Jun-2019 18:03:43.568 WARNING [Thread-19] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [ROOT] appears to have started a thread named [AsyncAppender-Worker-ConsoleTraceAppenderAsync] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: java.base@11/jdk.internal.misc.Unsafe.park(Native Method) java.base@11/java.util.concurrent.locks.LockSupport.park(LockSupport.java:194) java.base@11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2081) java.base@11/java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:417) ch.qos.logback.core.AsyncAppenderBase$Worker.run(AsyncAppenderBase.java:289) {code} Would be nice to improve graceful shutdown process for this case. -- This message was sent by Atlassian JIRA (v7.3.1#73012) _______________________________________________ logback-dev mailing list logback-dev@qos.ch http://mailman.qos.ch/mailman/listinfo/logback-dev