在 Spring Boot 中定义 logback 关闭钩子

Posted

技术标签:

【中文标题】在 Spring Boot 中定义 logback 关闭钩子【英文标题】:Define logback shutdown hook in Spring Boot 【发布时间】:2018-01-23 09:20:54 【问题描述】:

我在 spring-boot (1.5.3.RELEASE) 应用程序中使用 AsyncAppender。

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 运行时中 在启动 JVM 关闭后正确停止 LoggerContext

我想知道如何在 Spring Boot 应用程序中停止 AsyncAppender。在 Spring Boot 的哪个地方,我应该定义关闭钩子?

【问题讨论】:

【参考方案1】:

只需将&lt;shutdownHook/&gt; 指令添加到您的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] 类型的关闭挂钩

【讨论】:

【参考方案2】:

我遇到了类似的问题,但 logback 版本为 1.1.6 和 spring-boot 1.5.4。 我的解决方案是添加:

logging.register-shutdown-hook=true

到application.properties文件中进行邀请

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

【讨论】:

【参考方案3】:

从 logback 的 1.1.10 版本开始,您无需显式定义关闭挂钩。版本1.1.10 以后,logback 负责在 web 应用程序停止或重新加载时停止当前的 logback-classic 上下文(以及所有附加程序)。尝试更新您的 logback 版本并检查一次。

这是更新后的文档:https://logback.qos.ch/manual/configuration.html#webShutdownHook

【讨论】:

以上是关于在 Spring Boot 中定义 logback 关闭钩子的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot中实现logback多环境日志配置

spring boot logbackspring boot中logback日志乱码问题

Spring Boot:Spring Boot整合Logback和PageHelper

spring-boot中logback日志配置

剑指架构师系列-spring boot的logback日志记录

spring-boot logback日志常用配置解释