0

我正在使用 Asyn Appender 创建示例 Log4j2 配置,执行完成后 AsyncAppender 生成的线程没有被杀死?它是一个错误还是任何配置都明确地杀死了线程。

我的示例摘要 Appender

<!-- ####################### SUMMARY FILE APPENDER ####################### -->
    <RollingFile name="SUMMARY_ALL" fileName="./logs/summary.log"
        filePattern="logs/$${date:yyyy-MM}/summary-%d{yyyy-MM-dd-HH}-%i.log.gz">
        <PatternLayout>
            <pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="6"
                modulate="true" />
            <SizeBasedTriggeringPolicy size="10 MB" />
        </Policies>
    </RollingFile>

示例记录器如下

  <logger name="com.test.learn" level="DEBUG">
<appender-ref ref="Async" />
  </logger>

示例代码包com.test.learn;

导入 org.apache.logging.log4j.LogManager;

public class TestLogger {
private static org.apache.logging.log4j.Logger log = LogManager
        .getLogger(TestLogger.class);

public static void main(String[] args) {
    log.info("testing logger");
}

}

执行此操作后,java进程应该退出,但不是。谁能帮帮我吗。

4

3 回答 3

1

这将关闭日志子系统并停止任何异步线程:

    ((LifeCycle) LogManager.getContext()).stop();

(这需要更好地记录......)

于 2013-10-01T23:01:07.120 回答
0

我升级到 log4j2-beta-9,它工作正常。

于 2013-10-02T13:15:32.197 回答
0

在 Web 应用程序上下文中最适合我的是

org.apache.logging.log4j.LogManager.shutdown();
于 2019-04-01T14:17:08.020 回答