java日志按日期和文件大小自动切割需使用logback或log4j2等支持多策略的日志框架;logback通过rollingfileappender配合sizeandtimebasedrollingpolicy与sizeandtimebasedfnatp实现每日滚动+单文件超限(如100mb)切分,文件名含日期和序号(如app.2024-06-15.0.log),并支持maxhistory、totalsizecap等归档控制。

Java 日志按日期和文件大小自动切割,核心是使用支持多策略的日志框架(如 Logback 或 Log4j2),不能依赖 JDK 自带的 JUL 或简单输出流。Logback 因配置简洁、功能成熟,是最常用选择。
用 Logback 实现时间 + 大小双条件滚动
Logback 的 RollingFileAppender 配合 TimeBasedRollingPolicy 和 SizeAndTimeBasedFNATP(即“大小与时间混合命名策略”)可同时满足:每天生成新文件 + 单个文件超限后切分(例如 100MB)。
- 必须使用
SizeAndTimeBasedFNATP,它让 Logback 在时间滚动基础上叠加大小触发机制 - 文件名需含日期格式(如
app.%d{yyyy-MM-dd}.%i.log),其中%i是同一日内因大小触发的序号(0, 1, 2…) -
maxFileSize控制单个文件最大体积,maxHistory控制保留多少天的历史归档
关键配置示例(logback-spring.xml)
以下配置实现:日志写入 logs/app.log;按天滚动;单个文件超过 100MB 自动切为 app.2024-06-15.0.log、app.2024-06-15.1.log;最多保留 30 天归档文件,总归档大小不超过 2GB:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>logs/app.log</file><rollingpolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><filenamepattern>logs/app.%d{yyyy-MM-dd}.%i.log</filenamepattern><maxfilesize>100MB</maxfilesize><maxhistory>30</maxhistory><totalsizecap>2GB</totalsizecap><timebasedfilenamingandtriggeringpolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxfilesize>100MB</maxfilesize></timebasedfilenamingandtriggeringpolicy></rollingpolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender>
Log4j2 的等效方案
Log4j2 同样支持复合策略,使用 DefaultRolloverStrategy + TimeBasedTriggeringPolicy 与 SizeBasedTriggeringPolicy 并行触发:
- 触发器设为
TimeBased(每天)和SizeBased(如 100MB),Log4j2 默认会“或”逻辑响应任一条件 - 文件名模式需含
$${date:yyyy-MM-dd}和%i(序号),例如logs/app-${date:yyyy-MM-dd}.%i.log - 通过
DefaultRolloverStrategy的max属性限制归档数量,fileIndex设为nomax才启用 %i 序号
注意事项与常见问题
实际部署时容易忽略几个细节:
- 确保日志目录(如
logs/)存在且应用有写权限,否则滚动失败且可能静默丢日志 - Logback 中
SizeAndTimeBasedFNATP必须在rollingPolicy内嵌套声明,单独配triggeringPolicy无效 - 大小阈值建议设为整数 MB(如
100MB),避免写104857600这类易错数字 - Spring Boot 项目推荐用
logback-spring.xml而非logback.xml,以便利用 Spring Profile 动态切换配置
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










