2017-08-15 89 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调用。

相关问题