log4j2中rollingfileappender支持按时间与大小双条件滚动归档:timebasedtriggeringpolicy按日期、sizebasedtriggeringpolicy按文件大小(如50mb),任一满足即触发;defaultrolloverstrategy通过max="30"限制归档数,filepattern支持%d{yyyy-mm-dd}和%i实现日期+序号命名,后缀.gz自动压缩,并可结合deleteaction按天数和数量清理旧日志。

在 Log4j2 中,RollingFileAppender 支持同时按文件大小和日期滚动归档,关键在于正确组合 TimeBasedTriggeringPolicy 和 SizeBasedTriggeringPolicy,并配置合理的 DefaultRolloverStrategy。
配置触发策略:时间 + 大小双条件触发
Log4j2 允许在一个 RollingFileAppender 中同时启用两种触发策略,满足任一条件即触发归档(逻辑“或”):
-
TimeBasedTriggeringPolicy:按时间滚动(如每天生成新文件),需配合
filePattern中的日期格式(如app-%d{yyyy-MM-dd}-%i.log) -
SizeBasedTriggeringPolicy:按单个文件大小限制(如超过 100MB 就切分),单位支持 KB/MB/GB(如
size="100MB") - 两者共存时,只要达到任意一个阈值(比如当天文件超 100MB,或过了 00:00),就会立即归档并新建文件
设置归档策略:控制历史文件数量与命名规则
默认归档策略会保留最多 7 个历史文件,可通过 DefaultRolloverStrategy 自定义:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 用
max属性限制总归档数(如max="30"表示最多保留 30 个归档文件) - 用
filePattern定义归档文件名格式,其中%d{...}表示日期,%i表示同一天内的序号(用于大小滚动产生的多个文件) - 例如:
app-%d{yyyy-MM-dd}-%i.log.gz会生成app-2024-06-15-0.log.gz、app-2024-06-15-1.log.gz等
启用压缩与清理:节省磁盘空间
归档时自动压缩可显著减少存储占用,且 Log4j2 支持在归档后自动删除旧文件:
- 在
filePattern中指定后缀为.zip或.gz(如app-%d{yyyy-MM-dd}-%i.log.gz),Log4j2 会自动调用压缩器 - 配合 DeleteAction 可实现智能清理:比如只保留最近 30 天、且总数不超过 100 个的归档文件
- 需注意:压缩依赖
commons-compress或zstd-jni(gzip/zstd),确保 classpath 中有对应 jar
完整 XML 配置示例(Log4j2)
以下配置实现「每日归档 + 单文件超 50MB 归档 + 最多保留 30 个归档 + 自动 gzip 压缩」:
<rollingfile name="RollingFile" filename="logs/app.log" filepattern="logs/app-%d{yyyy-MM-dd}-%i.log.gz"><patternlayout><pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</pattern></patternlayout><policies><timebasedtriggeringpolicy></timebasedtriggeringpolicy><sizebasedtriggeringpolicy size="50MB"></sizebasedtriggeringpolicy></policies><defaultrolloverstrategy max="30"><delete basepath="logs" maxdepth="1"><iffilename glob="app-*.log.gz"></iffilename><iflastmodified age="30d"></iflastmodified></delete></defaultrolloverstrategy></rollingfile>Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










