我有以下的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("******");
}
}
答案 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
其中包括向您展示如何验证是否已执行关闭挂钩。