logback的shutdownHook是否取消注册jmxConfigurator

mjj*_*409 4 jmx logback

我正在使用<jmxConfigurator/>logback 中的元素; jmxConfigurator声明如下:

Thus, unless your application is a standalone Java application, you **MUST** unregister the JMXConfigurator instance from the JVM's Mbeans server.
Run Code Online (Sandbox Code Playgroud)

logback文档还提到了一个<shutdownHook/>配置元素,根据文档执行以下操作:

Installing a JVM shutdown hook is a convenient way for shutting down logback and releasing associated resources.
Run Code Online (Sandbox Code Playgroud)

是否包含<shutdownHook/>元素注意取消注册<jmxConfigurator/>

Luk*_*tor 8

是的,它确实.以下是调试器的证明: 在此输入图像描述

但是,有一些限制:

  1. <shutdownHook/> 仅在1.1.3版本中可用
  2. 虽然文档说 plain <shutdownHook/>是足够的,但你必须指定class属性: <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/> 否则logback抱怨:
    ERROR in ch.qos.logback.core.joran.action.ShutdownHookAction - Missing class name for shutdown hook. Near [shutdownHook] line 16
    

要确保JMXConfigurator停止,请在logback配置上启用调试模式:

<configuration debug="true">
   ...
</configuration>
Run Code Online (Sandbox Code Playgroud)

然后在日志结束时,您将看到:

INFO in ch.qos.logback.core.hook.DelayingShutdownHook@1a246fc6 - Logback context being closed via shutdown hook
INFO in ch.qos.logback.classic.jmx.JMXConfigurator(default) - onReset() method called JMXActivator [ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator]