logback的ShutdownHook关闭原理解析

 更新时间:2023年11月09日 08:36:50   作者:codecraft  
这篇文章主要为大家介绍了logback的ShutdownHook关闭原理源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

本文主要研究一下logback的ShutdownHook

ShutdownHook

ch/qos/logback/core/hook/ShutdownHook.java

/**
 * Interface describing a logback shutdown hook implementation
 * 
 * @author Mike Reinhold
 */
public interface ShutdownHook extends Runnable, ContextAware {
}
ShutdownHook接口继承了Runnable、ContextAware接口

ShutdownHookBase

ch/qos/logback/core/hook/ShutdownHookBase.java

/**
 * Base class for classes implementing a Logback ShutdownHook via extension
 *
 * @author Mike Reinhold
 */
public abstract class ShutdownHookBase extends ContextAwareBase implements ShutdownHook {
    public ShutdownHookBase() {
    }
    /**
     * Default method for stopping the Logback context
     */
    protected void stop() {
        addInfo("Logback context being closed via shutdown hook");
        Context hookContext = getContext();
        if (hookContext instanceof ContextBase) {
            ContextBase context = (ContextBase) hookContext;
            context.stop();
        }
    }
}
ShutdownHookBase继承了ContextAwareBase,声明实现ShutdownHook,它提供了一个stop方法,用于关闭ContextBase

DelayingShutdownHook

ch/qos/logback/core/hook/DelayingShutdownHook.java

/**
 * ShutdownHook implementation that stops the Logback context after a specified
 * delay.  The default delay is 0 ms (zero).
 *
 * @author Mike Reinhold
 */
public class DelayingShutdownHook extends ShutdownHookBase {
    /**
     * The default is no delay before shutdown.
     */
    public static final Duration DEFAULT_DELAY = Duration.buildByMilliseconds(0);
    /**
     * The delay in milliseconds before the ShutdownHook stops the logback context
     */
    private Duration delay = DEFAULT_DELAY;
    public DelayingShutdownHook() {
    }
    public Duration getDelay() {
        return delay;
    }
    /**
     * The duration to wait before shutting down the current logback context.
     *
     * @param delay
     */
    public void setDelay(Duration delay) {
        this.delay = delay;
    }
    public void run() {
        addInfo("Sleeping for "+delay);
        try {
            Thread.sleep(delay.getMilliseconds());
        } catch (InterruptedException e) {
        }
        super.stop();
    }
}
DelayingShutdownHook继承了ShutdownHookBase,其run方法先sleep指定的delay,然后执行stop方法

示例

<configuration debug="false">
    <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook">
        <delay>10</delay>
    </shutdownHook>
    <appender name="A" class="ch.qos.logback.core.read.ListAppender"/>
    <root level="DEBUG">
        <appender-ref ref="A" />
    </root>
</configuration>

小结

logback的ShutdownHook接口继承了Runnable、ContextAware接口,它有一个抽象类ShutdownHookBase提供了一个stop方法,用于关闭ContextBase,它的子类为DelayingShutdownHook,可以延迟指定时间再关闭ContextBase。

以上就是logback的ShutdownHook的详细内容,更多关于logback ShutdownHook的资料请关注脚本之家其它相关文章!

相关文章

  • springcloud连接远程nacos失败显示localhost服务连接失败的问题解决

    springcloud连接远程nacos失败显示localhost服务连接失败的问题解决

    这篇文章主要介绍了springcloud连接远程nacos失败显示localhost服务连接失败的问题解决,文中有详细的代码示例供大家参考,对大家解决问题有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • IDEA2022.1创建maven项目规避idea2022新建maven项目卡死无反应问题

    IDEA2022.1创建maven项目规避idea2022新建maven项目卡死无反应问题

    这篇文章主要介绍了IDEA2022.1创建maven项目规避idea2022新建maven项目卡死无反应问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • idea项目中target文件提示拒绝访问的解决

    idea项目中target文件提示拒绝访问的解决

    这篇文章主要介绍了idea项目中target文件提示拒绝访问的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • SpringMVC JSON数据传输参数超详细讲解

    SpringMVC JSON数据传输参数超详细讲解

    有时候参数的传递还需要更多的参数,比如一个获取用户信息的请求中既有用户ID等基本参数,还要求对查询结果进行分页,针对这种场景,一般都会将分页参数封装成一个对象,然后将它和基本参数一起传给控制器
    2023-02-02
  • window 下 win10 jdk8安装与环境变量的配置过程

    window 下 win10 jdk8安装与环境变量的配置过程

    这篇文章主要介绍了window 下 win10 jdk8安装与环境变量的配置,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Java实现多人聊天室(含界面)

    Java实现多人聊天室(含界面)

    这篇文章主要为大家详细介绍了Java实现多人聊天室,包含界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Spring Boot + Thymeleaf + Activiti 快速开发平台项目 附源码

    Spring Boot + Thymeleaf + Activiti 快速开发平台项目 附源码

    这篇文章主要介绍了Spring Boot + Thymeleaf + Activiti 快速开发平台项目附源码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 关于spring循环依赖问题及解决方案

    关于spring循环依赖问题及解决方案

    这篇文章主要介绍了关于spring循环依赖问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Elasticsearch Analyzer 内置分词器使用示例详解

    Elasticsearch Analyzer 内置分词器使用示例详解

    这篇文章主要为大家介绍了Elasticsearch Analyzer 内置分词器使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Drools Fusion(CEP)定义及使用方法讲解

    Drools Fusion(CEP)定义及使用方法讲解

    今天小编就为大家分享一篇关于Drools Fusion(CEP)定义及使用方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03

最新评论