如何将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版本,可以自己写一个文件名生成器来处理编号补零:
- 编写自定义类,继承默认的文件名生成策略,重写编号处理逻辑:
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())); } }
- 在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
相关产品推荐
相关产品推荐

