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

如何配置logback实现日志按时间、大小及应用启动时自动滚动

logback 实现按时间/大小滚动+启动触发滚动的配置方案

问题描述

使用logback的RollingFileAppender时,原有配置已经实现按天滚动、单文件超过阈值滚动,但应用重启时不会生成新的日志文件,需要额外实现启动时触发日志滚动,同时满足:

  • 不破坏原有日志自动归档和清理逻辑
  • 不需要在文件名中加入额外的启动时间戳
  • 适配新版SizeAndTimeBasedRollingPolicy

可行解决方案

方案一:内置参数配置(推荐,无需自定义代码)

logback 1.3.0及以上、1.4.0及以上版本已经原生支持启动时滚动的配置,仅需要在原有配置基础上新增2个参数即可,完整配置如下:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 关闭追加模式,启动时不往旧的当前日志文件写入内容 -->
    <append>false</append>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
        <maxFileSize>100MB</maxFileSize>
        <maxHistory>60</maxHistory>
        <totalSizeCap>20GB</totalSizeCap>
        <!-- 开启启动时自动触发滚动 -->
        <rolloverOnStartup>true</rolloverOnStartup>
    </rollingPolicy>
    <encoder>
        <pattern>%msg%n</pattern>
    </encoder>
</appender>

该方案完全保留原有文件名规则、归档和自动清理逻辑,无需修改任何业务代码,仅需升级到对应版本logback即可使用。

方案二:自定义滚动策略(兼容低版本logback)

如果无法升级logback版本,可以通过自定义滚动策略类的方式实现,步骤如下:

  1. 编写自定义类继承SizeAndTimeBasedRollingPolicy,重写启动方法主动触发滚动:
package com.yourcompany.utils;

import ch.qos.logback.core.rolling.RolloverFailure;
import ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy;

public class BootRollingSizeTimePolicy<E> extends SizeAndTimeBasedRollingPolicy<E> {
    @Override
    public void start() {
        super.start();
        try {
            rollover();
        } catch (RolloverFailure e) {
            addWarn("启动日志滚动失败,将沿用原有文件写入:" + e.getMessage());
        }
    }
}
  1. 修改logback配置中rollingPolicy的实现类为自定义类即可,其余配置保持不变:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <append>false</append>
    <!-- 替换为自定义的滚动策略类全限定名 -->
    <rollingPolicy class="com.yourcompany.utils.BootRollingSizeTimePolicy">
        <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
        <maxFileSize>100MB</maxFileSize>
        <maxHistory>60</maxHistory>
        <totalSizeCap>20GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
        <pattern>%msg%n</pattern>
    </encoder>
</appender>

两种方案均不会在日志文件名中新增额外启动时间戳,原有归档清理逻辑完全不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:06:05