2017-07-31 89 views

回答

0

Logback的shutdownHook已添加到v1.3中,并且可以使用Groovy进行配置。该docs有点轻在这个问题上和xml->groovy translator忽略shutdownHook但我如下已经验证通过Groovy的配置纳入关闭挂钩的:

import ch.qos.logback.classic.AsyncAppender 
    import ch.qos.logback.classic.PatternLayout 
    import ch.qos.logback.classic.encoder.PatternLayoutEncoder 
    import ch.qos.logback.core.ConsoleAppender 
    import static ch.qos.logback.classic.Level.INFO 

    scan("30 seconds") 

    statusListener(OnConsoleStatusListener) 

    def shutdownHook() { 
     def shutdownHook = new ch.qos.logback.core.hook.DelayingShutdownHook(); 
     shutdownHook.setContext(context); 

     def Thread hookThread = new Thread(shutdownHook, "Logback shutdown hook [" + context.name + "]"); 
     context.putObject("SHUTDOWN_HOOK", hookThread); 
     Runtime.getRuntime().addShutdownHook(hookThread); 
    } 

    shutdownHook(); 

    appender("Console-Appender", ConsoleAppender) { 
     encoder(PatternLayoutEncoder) { 
      pattern = "%d|%-5p|%t|%msg%n" 
     } 
    } 

    logger("com", INFO, ["Console-Appender"], false) 

    root(INFO, ["Console-Appender"]) 

这是通过运行一个Java程序,其使用的logback证实,通过使用-Dlogback.configurationFile明确指着上面的配置,并输出结果清楚地显示正在使用的关闭挂钩:

08:47:47,705 |-INFO in [email protected] - Setting ReconfigureOnChangeTask scanning period to 30 seconds 
08:47:47,728 |-INFO in [email protected] - Added status listener of type [ch.qos.logback.core.status.OnConsoleStatusListener] 
08:47:47,750 |-INFO in [email protected] - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] 
08:47:47,752 |-INFO in [email protected] - Naming appender as [Console-Appender] 
08:47:47,902 |-INFO in [email protected] - Setting level of logger [com] to INFO 
08:47:47,911 |-INFO in [email protected] - Attaching appender named [Console-Appender] to Logger[com] 
08:47:47,915 |-INFO in [email protected] - Setting level of logger [ROOT] to INFO 
08:47:47,915 |-INFO in [email protected] - Attaching appender named [Console-Appender] to Logger[ROOT] 
2017-08-01 08:47:48,072|INFO |main|yippee! 
Disconnected from the target VM, address: '127.0.0.1:57421', transport: 'socket' 
08:47:48,131 |-INFO in [email protected] - Sleeping for 0 milliseconds 
08:47:48,131 |-INFO in [email protected] - Logback context being closed via shutdown hook 
+0

谢谢您的回答!我会测试它。关于它的一个小评论,今天最后一个1.1版logback系列的可下载版本是1.1.10。没有1.1.13版本(尚未)。看看[下载dist页面](https://logback.qos.ch/dist/) – guindous

+0

道歉,我在我的回答中提到了1.1.3和1.1.13。正确的版本(即引入shutdownHook的版本)是1.1.3。因此它在1.1.10中可用。而且,由于您使用的是1.1.10,因此无需升级,只需按照我提供的用于在logback.groovy中定义shutdownHook的说明进行操作即可。我已经更新了我的答案。 – glytching