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

Log4j2达最大滚动文件数后不再滚动,持续覆盖默认日志文件问题

解决Logback带.0初始日志文件的滚动停止问题

你遇到的问题是Logback的DefaultRolloverStrategy在处理带.0后缀的初始日志文件时,会把它纳入滚动文件的计数范围,导致达到max=10后无法正常滚动,反而直接覆盖初始文件。下面是具体的原因分析和解决方案:

问题根源

你的初始日志文件名是${machine}_My_Sample.0.log,滚动文件模式为${machine}_My_Sample.%i.log。DefaultRolloverStrategy会将.0文件视为第一个滚动归档文件,当max=10时,系统认为.0到.9已经是10个保留文件。再触发滚动时,策略会尝试删除最旧的.0文件,并将当前正在写入的.0重命名为.10——但此时.0正处于写入状态无法被删除,最终只能直接覆盖当前的.0文件,导致滚动功能停止。

解决方案:使用FixedWindowRollingPolicy

要实现“初始文件为.0,滚动日志从.1到.10”的需求,推荐替换为FixedWindowRollingPolicy,它可以明确指定滚动文件的索引范围,将初始.0文件排除在滚动计数之外。

修改后的完整配置如下:

appender.sample.type = RollingFile
appender.sample.name = SampleRollingFile
appender.sample.fileName = ${basedir}/logs/${machine}_My_Sample.0.log
appender.sample.filePattern = ${basedir}/logs/${machine}_My_Sample.%i.log
appender.sample.layout.type = PatternLayout
appender.sample.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p [T:%T] %c{1}:%L - %m%n
appender.sample.policies.type = Policies
appender.sample.policies.size.type = SizeBasedTriggeringPolicy
appender.sample.policies.size.size = 100MB
# 替换为FixedWindowRollingPolicy来控制滚动索引范围
appender.sample.rollingPolicy.type = FixedWindowRollingPolicy
# 滚动文件起始索引设为1
appender.sample.rollingPolicy.minIndex = 1
# 滚动文件最大索引设为10
appender.sample.rollingPolicy.maxIndex = 10
appender.sample.rollingPolicy.fileNamePattern = ${basedir}/logs/${machine}_My_Sample.%i.log

滚动逻辑说明

每次触发滚动(文件达到100MB)时,这个配置会执行以下步骤:

  1. 删除最旧的滚动文件${machine}_My_Sample.10.log(如果存在)
  2. 将.9.log重命名为.10.log,.8.log重命名为.9.log……以此类推,直到.1.log重命名为.2.log
  3. 将当前正在写入的.0.log重命名为.1.log
  4. 新建空的.0.log继续写入日志

这样就能始终保持.0.log为当前活跃日志文件,.1.log到.10.log为滚动归档文件,完全匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:58:04