在 CentOS 上让 Java 日志滚动,常见有 三种主流方式。下面按推荐程度给你讲清楚,并附上可直接用的配置示例。
logback(最推荐,Java 项目最常用)如果你用的是 Spring Boot / logback,强烈建议用 logback 自带的滚动策略,而不是依赖系统。
logback-spring.xml<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/myapp/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天滚动 -->
<fileNamePattern>/var/log/myapp/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保留 30 天 -->
<maxHistory>30</maxHistory>
<!-- 总大小限制(可选) -->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</configuration>
✅ 优点
log4j2(次之)如果你用的是 log4j2:
<RollingFile name="FileAppender"
fileName="/var/log/myapp/app.log"
filePattern="/var/log/myapp/app-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %c - %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="200MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingFile>
logrotate(兜底方案)适合:
sudo vim /etc/logrotate.d/myapp
/var/log/myapp/app.log {
daily
rotate 30
size 200M
compress
delaycompress
missingok
notifempty
copytruncate
}
| 参数 | 作用 |
|---|---|
| daily | 每天滚动 |
| rotate 30 | 保留 30 份 |
| size 200M | 超过 200M 也滚 |
| compress | 压缩旧日志 |
| copytruncate | 不重启 JVM |
sudo logrotate -vf /etc/logrotate.d/myapp
JVM 打开的文件句柄不会释放,会导致磁盘不释放。
✅ 正确做法:
copytruncate| 场景 | 推荐 |
|---|---|
| Spring Boot | ✅ logback |
| 大型系统 | ✅ log4j2 |
| 第三方 Java | ✅ logrotate |
| 生产环境 | ❌ 手写脚本 |
告诉我:
我可以直接帮你写 可复制使用的完整配置 ✅