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

Log4j配置:如何让max属性管控跨月份滚动日志文件

解决Log4j跨月日志文件不被max属性管控的问题

问题根源

默认的DefaultRolloverStrategy会根据filePattern中的时间模式(如yyyyMM)划分文件组,仅管控当前月份的归档日志文件,跨月后旧月份的文件不在匹配范围内,导致max属性只对当月文件生效。

配置方案

修改DefaultRolloverStrategy的配置,添加自定义删除规则,让它统计所有符合命名规则的归档日志,而非局限于当前月份:

<RollingRandomAccessFile name="default"
    fileName="${default.directory}/MY-APP.log"                                      
    filePattern="${default.directory}/MY-APP.%d{yyyyMM}.%i.log">
    <!-- 保留你的触发策略,比如按大小或时间触发,以下为示例 -->
    <SizeBasedTriggeringPolicy size="100MB"/>
    <DefaultRolloverStrategy max="5" fileIndex="nomax">
        <Delete basePath="${default.directory}" maxDepth="1">
            <IfFileName glob="MY-APP.*.log"/>
            <IfAccumulatedFileCount exceeds="5"/>
        </Delete>
    </DefaultRolloverStrategy>
</RollingRandomAccessFile>

配置说明

  • fileIndex="nomax":关闭默认的按时间分片的索引分组逻辑,让策略不再局限于当前月份的文件组。
  • <Delete>节点:定义全局删除规则:
    • basePath="${default.directory}":指定日志文件所在目录。
    • maxDepth="1":仅检查当前目录,不递归子目录。
    • <IfFileName glob="MY-APP.*.log"/>:匹配所有以MY-APP.开头、.log结尾的归档日志(自动排除当前活跃的MY-APP.log)。
    • <IfAccumulatedFileCount exceeds="5"/>:当符合条件的归档日志总数超过5时,自动删除最早生成的文件。

这样配置后,无论日志属于哪个月份,只要归档文件总数超过设定的max值,就会按文件生成顺序清理旧文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:22:27