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

Log4j2 SizeBasedTriggeringPolicy每分钟生成文件问题求助

问题分析与解决方案:Log4j2 RollingFile Appender 日志频繁滚动问题

你遇到的核心问题是CronTriggeringPolicy的调度表达式配置错误,导致日志每分钟都触发滚动,完全偏离了「每日滚动+日内按大小滚动」的预期。

错误原因拆解

你配置的Cron表达式是0 * * * * ?,这个表达式的含义是每分钟的第0秒触发一次日志滚动——这就是为什么你会看到一天内生成了上百个带序号的日志文件。Cron表达式的结构是秒 分 时 日 月 周 年(可选),当前的配置完全不符合「每日滚动」的需求。

修正后的配置方案

要实现「每日凌晨自动切分新的日期日志文件,同时当日志文件达到500MB时日内滚动生成带序号的文件」,你需要调整Cron表达式,并补充必要的滚动策略配置,完整配置如下:

<RollingFile name="performance" 
             filePattern="/logs/myapp/myapp.%d{yyyy-MM-dd}.%i.perf.log" 
             append="true">
    <!-- 建议添加日志输出格式,可根据自身需求调整内容 -->
    <PatternLayout pattern="%d{ISO8601} %-5level %logger{36} - %msg%n"/>
    <Policies>
        <!-- 每日凌晨0点0分0秒触发日期滚动 -->
        <CronTriggeringPolicy schedule="0 0 0 * * ?" evaluateOnStartup="true"/>
        <!-- 当日志文件达到500MB时,日内滚动生成带序号的文件 -->
        <SizeBasedTriggeringPolicy size="500 MB"/>
    </Policies>
    <!-- 可选:控制同一日期下最多保留30个滚动文件,避免磁盘占用过高 -->
    <DefaultRolloverStrategy max="30"/>
</RollingFile>

关键配置说明

  • Cron表达式调整:0 0 0 * * ?表示每天凌晨0点整触发一次日志滚动,生成以当日日期命名的新日志文件。
  • SizeBasedTriggeringPolicy:保持500 MB的配置,当日志在一天内达到这个大小,会自动生成带递增序号的文件(比如myapp.2018-05-10.1.perf.log、myapp.2018-05-10.2.perf.log)。
  • DefaultRolloverStrategy:用来限制同一日期下的滚动文件数量,防止日志文件无限制累积,你可以根据磁盘容量调整max值。
  • evaluateOnStartup="true":确保应用在凌晨0点前后启动时,会自动检查是否需要切换到新的日期日志文件,避免跨日期的日志混写。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:06:05