温馨提示×

如何压缩centos golang日志

小樊
39
2026-10-11 23:17:14
栏目: 编程语言

在 CentOS 上压缩 Golang 程序产生的日志,常见做法有应用层压缩、系统工具压缩、日志轮转+压缩几种方式。下面按实用场景给你一套清晰方案。


一、最推荐:使用 logrotate(CentOS 原生方案)

适合:运行中的服务日志(如 /var/log/app/*.log)

1. 安装(一般已有)

yum install logrotate -y

2. 添加配置

vim /etc/logrotate.d/mygolang

示例:

/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    copytruncate
}

说明:

  • compress:用 gzip 压缩
  • copytruncate:不重启 Golang 程序也能切割
  • daily / rotate 7:每天切割,保留 7 天

3. 手动测试

logrotate -f /etc/logrotate.d/mygolang

二、Golang 程序内压缩(适合离线 / 自定义)

方案 1:使用 gzip 写日志

f, _ := os.Create("app.log.gz")
w := gzip.NewWriter(f)
log.SetOutput(w)

✅ 缺点:不能方便用 tail


方案 2:使用成熟的日志库(推荐)

zap + lumberjack

import (
    "gopkg.in/natefinch/lumberjack.v2"
)

logger := &lumberjack.Logger{
    Filename:   "/var/log/myapp/app.log",
    MaxSize:    10, // MB
    MaxBackups: 7,
    Compress:   true, // gzip 压缩
}
log.SetOutput(logger)

✅ 自动切割 + 压缩
✅ 不需 logrotate


三、一次性压缩已有日志

gzip /var/log/myapp/app.log

或批量:

find /var/log/myapp -name "*.log" -exec gzip {} \;

四、查看压缩日志

zcat app.log.gz
# 或
zless app.log.gz

五、建议组合(生产最佳实践)

✅ Golang + lumberjack(Compress:true)
✅ 或 Golang 写普通日志 + CentOS logrotate

如果你愿意,可以告诉我:

  • 日志路径
  • 是否常驻服务
  • 是否容器运行

我可以给你一份可直接用的配置。

0 踩