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

Log4j2.3滚动日志文件编号异常问题求助

解决Log4j2.3滚动日志最新内容出现在最大编号文件的问题

我之前也踩过Log4j 2.3版本这个滚动日志的坑!你遇到的情况是因为这个版本的DefaultRolloverStrategy存在一个已知的行为问题,当用纯数字编号的归档格式时,滚动逻辑会搞反文件顺序——本该作为当前活跃文件的Test.log反而不是最新的,最新日志跑到了编号最大的归档文件里。

问题根源

Log4j 2.3是2015年的老版本,当时的DefaultRolloverStrategy在处理SizeBasedTriggeringPolicy时,对于纯数字命名的归档文件,滚动逻辑存在反转:触发滚动时,新的日志会被写入到最大编号的文件,而非配置里指定的fileName(也就是Test.log)。这个问题在后续的2.4及以上版本已经被修复了。

两种解决办法

1. 升级Log4j2版本(最推荐)

直接把Log4j2升级到最新的稳定版本,不仅能彻底解决这个滚动顺序的问题,还能修复其他已知bug、提升性能,同时获得更完善的功能支持。毕竟老版本的安全和稳定性都不如新版本。

2. 调整滚动策略配置(无法升级时用)

如果项目暂时没法升级版本,可以修改DefaultRolloverStrategy的配置,添加fileIndex="min"属性:

<DefaultRolloverStrategy max="10" fileIndex="min"/>

这个配置会改变滚动逻辑:

  • 始终让Test.log作为当前活跃的最新日志文件,所有新日志都写入这里
  • 当Test.log达到5MB的大小限制时,会把它重命名为Test.log.1,已有的Test.log.1会被重命名为Test.log.2,以此类推
  • 当编号超过max设置的10时,最老的Test.log.10会被自动删除

修改完配置后重启应用,再生成一些日志触发滚动,就能看到Test.log始终是最新的日志文件,编号小的归档文件是较旧的日志,编号最大的是最老的归档。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:16:24