在 CentOS 上压缩 Java 日志,常见做法有 手动压缩、定时任务压缩、用日志框架自带滚动压缩 几种方式。下面按使用场景给你说明。
假设你有日志文件:
/var/log/java/app.log
gzip /var/log/java/app.log
生成:
app.log.gz
zip app.log.zip app.log
tar -czf java-logs.tar.gz /var/log/java/
CentOS 自带 logrotate,非常适合 Java 日志。
新建配置:
vi /etc/logrotate.d/java-app
内容示例:
/var/log/java/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
说明:
daily:每天轮转rotate 7:保留 7 份compress:压缩旧日志copytruncate:不重启 Java 进程也能截断日志(常用)logrotate -d /etc/logrotate.d/java-app # 模拟
logrotate -f /etc/logrotate.d/java-app # 强制执行
logback-spring.xml:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/java/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/java/app.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
</appender>
✅ 自动生成 app.2026-01-21.log.gz
<RollingFile name="File" fileName="/var/log/java/app.log"
filePattern="/var/log/java/app-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="%d %p %c{1.} %m%n"/>
<TimeBasedTriggeringPolicy interval="1"/>
<DefaultRolloverStrategy max="7"/>
</RollingFile>
crontab -e
每天凌晨压缩前一天日志:
0 0 * * * find /var/log/java -name "*.log" -mtime +1 -exec gzip {} \;
| 场景 | 推荐方式 |
|---|---|
| 生产 Java 服务 | Logback / Log4j2 自带压缩 |
| 已有日志文件 | logrotate |
| 临时处理 | gzip / tar |
| 不想改代码 | logrotate + copytruncate |
如果你能告诉我:
我可以给你一份可直接用的配置。