You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tinylog 2.7.0中如何在任务结束后关闭滚动日志文件?

解决方案

你的问题根源在于:tinylog的滚动文件写入器(RollingFileWriter)在启用dynamic滚动策略时,仅当DynamicSegment的值变更时才会自动滚动日志并关闭旧文件;若无后续任务触发DynamicSegment变更,当前日志文件会一直处于打开状态。

直接调用ProviderRegistry.getLoggingProvider().shutdown()会关闭整个日志系统,导致后续任务无法正常输出日志,因此不可行。正确的做法是单独关闭当前的日志文件句柄,同时保留写入器的可用性,具体实现如下:

代码修改

在任务执行完成后,获取RollingFileWriter实例并调用其close()方法:

import org.tinylog.core.provider.ProviderRegistry;
import org.tinylog.core.logging.RollingFileLoggingProvider;
import org.tinylog.writers.RollingFileWriter;

public void doJob(String pathOFJob) {
  DynamicSegment.setText(pathOFJob);
  
  // 执行任务逻辑
  
  // 任务完成后关闭当前日志文件
  var loggingProvider = ProviderRegistry.getLoggingProvider();
  if (loggingProvider instanceof RollingFileLoggingProvider) {
    RollingFileWriter fileWriter = ((RollingFileLoggingProvider) loggingProvider).getWriter();
    fileWriter.close();
  }
}

关键说明

  • close()方法仅关闭当前打开的日志文件,不会销毁写入器实例。当下一个任务设置新的DynamicSegment并输出日志时,写入器会自动重新初始化文件流,创建/打开新路径下的System.out.log。
  • 由于你的配置中writer.tag = -(全局唯一写入器),无需区分多个写入器,直接获取即可。

内容的提问来源于stack exchange,提问作者vfrolov Frolov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:13:29