在 CentOS 上压缩 Java 日志,常见做法有 手动压缩、定时任务(cron)压缩、使用 Java 日志框架自带的滚动压缩 三种方式。下面分别说明。
如果日志文件是:
/opt/app/logs/app.log
压缩命令:
gzip /opt/app/logs/app.log
生成:
app.log.gz
或保留原文件:
tar -czf app.log.tar.gz app.log
CentOS 自带 logrotate,非常适合 Java 日志。
创建配置文件:
vim /etc/logrotate.d/java-app
内容示例:
/opt/app/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
说明:
daily:每天滚动rotate 7:保留 7 份compress:压缩旧日志(默认 gzip)copytruncate:不重启 Java 进程直接截断日志(常用)missingok:日志不存在不报错logrotate -d /etc/logrotate.d/java-app # 调试
logrotate -f /etc/logrotate.d/java-app # 强制执行
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/opt/app/logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/opt/app/logs/app.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
✅ 自动生成 .gz 压缩日志
<RollingFile name="File" fileName="/opt/app/logs/app.log"
filePattern="/opt/app/logs/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 * * * gzip -f /opt/app/logs/*.log
⚠️ 不推荐(Java 仍写原文件,可能丢日志)
| 场景 | 推荐方式 |
|---|---|
| 生产 Java 应用 | Logback / Log4j2 自带压缩 |
| 第三方 Java 程序 | logrotate |
| 临时清理 | 手动 gzip |
如果你能提供:
我可以给你 直接可用的配置。