添加Splunk logback appender可防止应用程序终止

时间:2017-09-05 23:44:55

标签: logback splunk

我有以下的logback配置,我在一个非常简单的Java应用程序中使用它,除了记录一行之外什么都不做。当我取消注释Splunk appender行时,它不会让应用程序退出,即使应用程序已完成。

有没有办法终止所有日志记录线程,以便主应用程序退出?

logback.xml

<appender name="SPLUNK" class="com.splunk.logging.HttpEventCollectorLogbackAppender">
    <url>${splunkUrl}</url>
    <token>${splunkToken}</token>
    <source>${projectName}</source>
    <host>${COMPUTERNAME}</host>
    <sourcetype>batch_application_log:json</sourcetype>
    <disableCertificateValidation>true</disableCertificateValidation>
    <!--<messageFormat>json</messageFormat>-->
    <!--<retries_on_error>1</retries_on_error>-->
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>"%msg"</pattern>
    </layout>
</appender>
<root level="INFO">
     <!--<appender-ref ref="SPLUNK"/>--> if I uncomment this line application never exits
</root>

Java代码

public class Main {

public static void main(String[] args) {
    final Logger logger = LoggerFactory.getLogger(Main.class);
    logger.info("******");
}

}

1 个答案:

答案 0 :(得分:0)

您可以添加Logback shutdown hook,这将关闭所有appender并停止与Logback相关的任何活动线程。

例如:

<configuration debug="true">
    <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook">
        <!-- 
            the default value is 0 millis, I have included a non default
            value here just to show you how it can be supplied 
        -->
        <delay>10</delay>
    </shutdownHook>

    ... 
<configuration>

使用关闭挂钩并且debug="true" Logback将发出自己的日志事件,如此...

08:57:19,410 |-INFO in ch.qos.logback.core.hook.DelayingShutdownHook@2bafec4c - Sleeping for 10 milliseconds
08:57:19,421 |-INFO in ch.qos.logback.core.hook.DelayingShutdownHook@2bafec4c - Logback context being closed via shutdown hook

注意:没有要求使用debug="true",我只有o 其中包括向您展示如何验证是否已执行关闭挂钩。