在 CentOS 上“切割 Java 日志文件”常见有 3 种方式,按使用频率从高到低说明:
适用场景:Tomcat、Spring Boot(输出到文件)、普通 Java 应用日志
sudo vi /etc/logrotate.d/java-app
示例(按天切割,保留 7 天):
/opt/app/logs/*.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
copytruncate
}
daily:每天切割rotate 7:保留 7 份compress:压缩旧日志copytruncate:不重启 Java 进程直接截断日志(常用)sudo logrotate -f /etc/logrotate.d/java-app
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
</appender>
✅ 无需 logrotate,应用自己切
#!/bin/bash
LOG=/opt/app/logs/app.log
DATE=$(date +%Y%m%d)
mv $LOG $LOG.$DATE
touch $LOG
# 如果是 Java 进程
kill -USR1 $(pgrep -f java)
⚠️ 需要 Java 支持信号或自己处理
mv 但没 copytruncate✅ 解决:用 copytruncate 或应用内切割
/opt/tomcat/logs/catalina.out {
daily
rotate 10
compress
copytruncate
}
| 场景 | 方案 |
|---|---|
| 通用 Java 日志 | logrotate |
| Spring Boot | logback/log4j2 |
| 容器 | 应用内切割 |
如果你能告诉我:
我可以给你 精确配置。