[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