Reputation: 429
I am using AsyncAppender in spring-boot (1.5.3.RELEASE) application.
logback.xml
<appender name="FILE_ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<queueSize>5000</queueSize>
<discardingThreshold>0</discardingThreshold>
<appender-ref ref="FILE" />
</appender>
As per logback documentation,
Upon application shutdown or redeploy, AsyncAppender must be stopped in order to stop and reclaim the worker thread and to flush the logging events from the queue.
https://logback.qos.ch/manual/appenders.html
Further it says:
In order to avoid interrupting the worker thread under these conditions, a shutdown hook can be inserted to the JVM runtime that stops the LoggerContext properly after JVM shutdown has been initiated
I want to know how to stop AsyncAppender in Spring Boot application. At which place in Spring Boot, should I define shutdown hook?
Upvotes: 10
Views: 12335
Reputation: 461
I had a similar problem but with version 1.1.6 of logback and spring-boot 1.5.4. The solution for me was to add :
logging.register-shutdown-hook=true
to the application.properties file for inviting
org.springframework.boot.logging.logback.LogbackLoggingSystem
to stop the LoggerContext on ApplicationContext.close invocation.
Upvotes: 6
Reputation: 429
You need not define the shutdown hook explicitly since version 1.1.10
of logback. Version 1.1.10
onwards, logback takes care of stopping the current logback-classic context (and all the appenders) when the web-app is stopped or reloaded. Try updating your logback version and check once.
Here's the updated doc: https://logback.qos.ch/manual/configuration.html#webShutdownHook
Upvotes: 6
Reputation: 47895
Just add the <shutdownHook/>
instruction to your logback.xml
. For example:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>
<appender name="FILE_ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<queueSize>5000</queueSize>
<discardingThreshold>0</discardingThreshold>
<appender-ref ref="FILE" />
</appender>
<!-- the rest of your logback config -->
</configuration>
With this in place you'll notice the following log message is emitted when Logback is configuring itself:
INFO in ch.qos.logback.core.joran.action.ShutdownHookAction - About to instantiate shutdown hook of type [ch.qos.logback.core.hook.DelayingShutdownHook]
Upvotes: 11