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的资料请关注脚本之家其它相关文章!
相关文章
SpringBoot中使用MQTT实现消息的订阅和发布(示例代码)
这篇文章主要介绍了SpringBoot中使用MQTT实现消息的订阅和发布的相关知识,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧2024-06-06
Java SpringBoot项目如何优雅的实现操作日志记录
这篇文章主要介绍了Java SpringBoot项目如何优雅的实现操作日志记录,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下2022-08-08


最新评论