在 CentOS 上压缩 Java 日志,常见有 手动压缩、定时压缩(cron)、以及 Java 应用自身滚动压缩(如 logback/log4j2) 几种方式。下面按常见场景说明。
gzip app.log
生成:app.log.gz
tar -zcvf logs-$(date +%Y%m%d).tar.gz /opt/app/logs
gzip /opt/app/logs/*.log.2024-*
CentOS 自带 logrotate,非常适合 Java 日志。
sudo vi /etc/logrotate.d/java-app
内容示例:
/opt/app/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
说明:
compress:使用 gzip 压缩copytruncate:不重启 Java 进程就能截断日志(很重要)daily:每天执行rotate 7:保留 7 份测试:
logrotate -d /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.gz</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
</appender>
✅ 自动生成 .log.gz
<RollingFile name="File" fileName="logs/app.log"
filePattern="logs/app-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%d %p %c{1.} %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
crontab -e
每天凌晨压缩昨天日志:
0 0 * * * gzip /opt/app/logs/*.log.`date -d yesterday +%Y-%m-%d`
copytruncate 或 Java 滚动策略du -sh /opt/app/logs
如果你能告诉我:
我可以给你精确到配置的压缩方案。