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

Log4j2保留日期戳文件名且限制日志总数为100的配置需求

解决Log4j2保留日期戳同时限制全局日志总数为100的问题

问题分析

你的配置中DefaultRolloverStrategy max="100"仅对同一日期前缀的日志文件生效(因为filePattern包含yyyy-MM-dd时间戳),导致每天都会生成最多100个文件,跨日期的旧文件不会被自动清理,最终总数远超100。

解决方案

通过在DefaultRolloverStrategy中添加Delete子策略,实现全局范围内保留最新的100个压缩日志文件,同时保留原有的日期戳命名规则。

修改后的完整配置如下:

<RollingFile name="RollingFileMarket"
             fileName="logs/app.log"
             filePattern="logs/app-%d{yyyy-MM-dd-HH-mm}-%i.log.gz"
             ignoreExceptions="true"
             immediateFlush="false"
             append="true"
             createOnDemand="true">
    <PatternLayout pattern="%d %p %c{1.} [%t] %m %ex %map{} %n"/>
    <Policies>
        <OnStartupTriggeringPolicy/>
        <SizeBasedTriggeringPolicy size="50 MB"/>
    </Policies>
    <DefaultRolloverStrategy max="100">
        <!-- 全局日志文件清理策略 -->
        <Delete basePath="logs" maxDepth="1">
            <!-- 匹配所有符合命名规则的压缩日志 -->
            <IfFileName glob="app-*.log.gz"/>
            <!-- 当文件总数超过100时,删除最旧的文件 -->
            <IfAccumulatedFileCount exceeds="100"/>
        </Delete>
    </DefaultRolloverStrategy>
</RollingFile>

关键配置说明

  • <Delete basePath="logs" maxDepth="1">:指定日志文件所在目录,maxDepth="1"表示仅检查当前目录,不递归子目录。
  • <IfFileName glob="app-*.log.gz"/>:匹配所有以app-开头、.log.gz结尾的压缩日志文件,确保只清理目标日志。
  • <IfAccumulatedFileCount exceeds="100"/>:当目录中符合条件的文件总数超过100时,自动删除最旧的文件(按修改时间排序),直到总数维持在100以内。

原有的max="100"可以保留,它会限制单日同一时间戳前缀下的文件数量,配合全局的Delete策略,既能避免单日文件爆炸,又能保证全局总数不超过100。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:43:31