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

如何将Logback日志文件名的整数计数器设置为3位格式?

Logback配置归档日志编号为三位补零格式的方法

要让Logback生成Test.2022-09-23.001.log这种三位补零的归档文件名,确实不能直接用%iii,但有两种可行的实现方式:

方法一:直接使用格式化参数(推荐,适用于Logback 1.2+)

Logback 1.2版本及以上支持对%i参数添加格式修饰符,直接修改fileNamePattern即可:

<fileNamePattern>Test.%d{yyyy-MM-dd}.%03i.log</fileNamePattern>

如果之前试%03i无效,先检查你的Logback版本,低于1.2的话升级到1.2.x或更高版本就能生效。

方法二:自定义文件名生成器(兼容低版本)

如果没法升级Logback版本,可以自己写一个文件名生成器来处理编号补零:

  1. 编写自定义类,继承默认的文件名生成策略,重写编号处理逻辑:
import ch.qos.logback.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy;

public class ZeroPaddedIndexGenerator<E> extends DefaultTimeBasedFileNamingAndTriggeringPolicy<E> {
    @Override
    protected String getCurrentPeriodsFileNameWithoutCompression() {
        String rawFileName = super.getCurrentPeriodsFileNameWithoutCompression();
        // 把末尾的数字替换成三位补零格式
        return rawFileName.replaceFirst("\\.(\\d+)\\.log$", String.format(".%03d.log", getCurrentIndex()));
    }
}
  1. 在Logback配置中指定这个自定义类:
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>Test.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>Test.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <maxFileSize>100MB</maxFileSize>    
        <maxHistory>60</maxHistory>
        <totalSizeCap>20GB</totalSizeCap>
        <!-- 替换成你的自定义类全路径 -->
        <fileNameGenerator class="com.yourpackage.ZeroPaddedIndexGenerator"/>
    </rollingPolicy>
    <encoder>
        <pattern>%msg%n</pattern>
    </encoder>
</appender>

注意:方法一操作最简单,优先考虑升级Logback版本;方法二需要自行维护代码,适合受限于版本的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:45:55