2017-08-15 131 views
1

我在spring-boot(1.5.3.RELEASE)應用程序中使用AsyncAppender。在Spring Boot中定義logback shutdown hook

logback.xml

<appender name="FILE_ASYNC" class="ch.qos.logback.classic.AsyncAppender"> 
    <queueSize>5000</queueSize> 
    <discardingThreshold>0</discardingThreshold> 
    <appender-ref ref="FILE" /> 
</appender> 

按照文檔的logback,

在應用程序關閉或重新部署,AsyncAppender必須以停止並回收工作線程和沖洗停止 從隊列中記錄事件 。

https://logback.qos.ch/manual/appenders.html

此外,它說:

爲了避免這些 條件下中斷工作線程,一個關閉掛鉤可被插入到JVM運行時 停止LoggerContext正確在JVM關機已啓動後

我想知道如何將st在Spring Boot應用程序中運行AsyncAppender。在Spring Boot的哪個位置,我應該定義關閉掛鉤嗎?

回答

5

只需將<shutdownHook/>指令添加到您的logback.xml即可。例如:

<?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> 

有了這個地方,你會發現的logback時是配置本身以下日誌消息發出:在ch.qos.logback.core.joran.action

信息。 ShutdownHookAction - 關於實例類型的關閉掛鉤[ch.qos.logback.core.hook.DelayingShutdownHook]

0

你不需要定義關機鉤明確的logback以來的1.1.10版本。版本1.1.10之後,logback負責停止或重新加載Web應用程序時停止當前的logback-classic上下文(以及所有appender)。嘗試更新您的logback版本並檢查一次。

下面是更新文檔:https://logback.qos.ch/manual/configuration.html#webShutdownHook

0

我也有類似的問題,但用的logback和春季啓動1.5.4 1.1.6版本。 對我來說,解決辦法是補充:

logging.register-shutdown-hook=true 

到application.properties文件邀請

org.springframework.boot.logging.logback.LogbackLoggingSystem停止LoggerContext上ApplicationContext.close調用。

相關問題