首页 > 解决方案 > Logback 线程池

问题描述

我使用 Logback 进行日志记录,我有一个问题。我将 AsyncAppender 与 ConsoleAppender 一起使用。当应用程序启动时,它会使用“logback-”线程名称创建线程池。所有的日志记录工作都由“AsyncAppender-Worker-”线程完成。出于什么目的创建了具有“logback-”线程名称的线程池,它的作用是什么?

标签: javalogginglogback

解决方案


简短的回答

这些线程用于 logback 需要在后台执行的所有其他工作 - 基于时间的翻转、套接字附加程序、异步 SMTP 附加程序等。

稍微长一点的答案

通过在 logback 代码库上对“logback-”进行搜索,我只找到了一个使用它的地方:ExecutorServiceUtil.

这个帮助类用于创建执行器服务(只能由 访问Contextbase.getScheduledExecutorService()),通过跟踪它的用法,我发现了这些用法:

  • 基于时间的翻转将异步压缩(如果启用压缩)并清理旧存档。我认为这是因为在应用程序线程上压缩旧文件将是一件坏事。
  • 套接字附加程序有一个连接器线程,如果连接失败,它会重新连接,并且有一个正在由后台线程处理的异步消息缓冲区。
  • 如果以这种方式配置,SMTP 附加程序可以是异步的 - 然后它也将使用后台执行程序。

这是一份详尽的清单。请注意,所有这些都是从源代码中读取的。基于时间的翻转虽然异步是绝对有意义的,但没有记录在案,因此可能会改变。socket appender 和 SMTP appender 被记录为使用后台线程。


推荐阅读