[prev in list] [next in list] [prev in thread] [next in thread]
List: logback-dev
Subject: [logback-dev] [JIRA] (LOGBACK-1469) AsycAppender defined in configuration but not used in any logger
From: "QOS.CH (JIRA)" <noreply-jira () qos ! ch>
Date: 2019-06-14 15:19:00
Message-ID: JIRA.15580.1560525513000.43.1560525540159 () Atlassian ! JIRA
[Download RAW message or body]
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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic