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
相关产品推荐
相关产品推荐

