java – 停止log4J AsyncAppender的线程

我在我的应用程序中使用Log4J AsyncAppender,我想知道,当我的应用程序完成时,AsyncAppender的线程会发生什么?我应该手动终止线程还是我可以忘记它并退出我的应用程序而不必担心某些日志消息会丢失? 最佳答案 查看AsyncAppender的源代码,
it creates a daemon thread(第112-117行)来处理事件的编写,作者希望您在appender上显式调用close()以确保在JVM关闭之前写出任何排队的消息:

dispatcher = new Thread(new Dispatcher(this, buffer, discardMap, appenders));

// It is the user's responsibility to close appenders before
// exiting.
dispatcher.setDaemon(true);

通过将线程设置为守护程序,这意味着一旦应用程序的核心退出,JVM将不会继续运行.但是,这也意味着如果您的应用程序在没有通知appender的情况下关闭,队列中的任何消息都将丢失.

点赞