温馨提示×

centos怎样压缩java日志

小樊
44
2026-09-03 01:35:25
栏目: 编程语言

在 CentOS 上压缩 Java 日志,常见有 手动压缩定时压缩(cron)、以及 Java 应用自身滚动压缩(如 logback/log4j2) 几种方式。下面按常见场景说明。


一、手动压缩日志(最常用)

1. 使用 gzip 压缩

gzip app.log

生成:app.log.gz

2. 使用 tar 打包并压缩

tar -zcvf logs-$(date +%Y%m%d).tar.gz /opt/app/logs

3. 只压缩旧日志,不压缩正在写入的

gzip /opt/app/logs/*.log.2024-*

二、使用 logrotate(推荐,系统级)

CentOS 自带 logrotate,非常适合 Java 日志。

示例:压缩 Tomcat / Spring Boot 日志

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

三、Java 应用自身压缩(最佳实践)

1. logback(Spring Boot 常用)

<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

2. log4j2

<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>

四、定时任务压缩(cron)

crontab -e

每天凌晨压缩昨天日志:

0 0 * * * gzip /opt/app/logs/*.log.`date -d yesterday +%Y-%m-%d`

五、注意事项(很重要)

  1. 不要直接压缩正在写入的日志文件
    • copytruncate 或 Java 滚动策略
  2. 磁盘空间不足时优先:
    du -sh /opt/app/logs
    
  3. 大日志建议:
    • 按天滚动
    • 保留 7–30 天
    • 自动压缩

如果你能告诉我:

  • Java 应用类型(Spring Boot / Tomcat / 普通 jar)
  • 日志框架(logback / log4j2 / 无)
  • 是否允许重启服务

我可以给你精确到配置的压缩方案

0