温馨提示×

debian如何压缩golang日志

小樊
45
2026-10-27 18:51:33
栏目: 编程语言

在 Debian 上压缩 Go(Golang)程序产生的日志,常见做法有 应用内轮转压缩、系统工具压缩、手动/脚本压缩 三类。下面按实用程度给你几种方案。


一、推荐:用 Go 日志库自带轮转+压缩(最省心)

如果你用的是 Go 写的服务,最推荐在 应用层 解决。

1. 使用 lumberjack(最常用)

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

log.SetOutput(&lumberjack.Logger{
    Filename:   "/var/log/myapp/app.log",
    MaxSize:    100, // MB
    MaxBackups: 7,
    MaxAge:     30,   // 天
    Compress:   true, // 自动 gzip 压缩
})

✅ 优点

  • 自动切割
  • 自动 gzip 压缩
  • 不需要外部依赖

二、系统级:使用 logrotate(Debian 自带)

如果你已经是 直接写文件(如 app.log),用系统工具最稳。

1. 创建 logrotate 配置

sudo nano /etc/logrotate.d/myapp

示例:

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

2. 参数说明

  • compress:用 gzip
  • delaycompress:避免当天日志被压
  • copytruncate:不重启 Go 程序也能用
  • rotate 14:保留 14 份

3. 手动测试

sudo logrotate -d /etc/logrotate.d/myapp  # 模拟
sudo logrotate -f /etc/logrotate.d/myapp  # 强制执行

✅ 适合:

  • 已上线服务
  • 不想改代码

三、手动压缩(临时/简单)

gzip /var/log/myapp/app.log.1

或批量:

gzip /var/log/myapp/*.log.*

四、定时压缩(cron)

crontab -e

示例(每天凌晨压缩):

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

五、方案选择建议

场景 推荐
Go 项目新写 lumberjack
已有服务 logrotate
临时处理 gzip
容器环境 应用内压缩

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

  • 日志路径
  • 是否容器运行
  • Go 用的什么日志库

我可以直接帮你写完整配置。

0 踩