温馨提示×

如何压缩debian golang日志

小樊
45
2026-09-01 05:39:13
栏目: 编程语言

在 Debian 上压缩 Go 应用产生的日志,常见做法有 应用内轮转压缩系统工具(logrotate)外部采集压缩 几种。下面按实用程度给你一套清晰方案。


一、推荐方案:使用 logrotate(最常用,零代码改动)

Debian 自带 logrotate,非常适合压缩 Go 程序日志。

1. 安装(一般已存在)

sudo apt install logrotate

2. 创建配置

假设日志路径:/var/log/myapp/*.log

sudo vim /etc/logrotate.d/myapp

内容示例:

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

参数说明

  • daily:每天轮转
  • rotate 14:保留 14 天
  • compress:使用 gzip 压缩
  • delaycompress:延迟一天压缩(防写入冲突)
  • copytruncate:不重启 Go 程序,直接截断日志(非常适合 Go

3. 测试

sudo logrotate -d /etc/logrotate.d/myapp
sudo logrotate -f /etc/logrotate.d/myapp

二、Go 应用内压缩(无需外部依赖)

如果你希望 日志自动压缩并控制大小,推荐用库:

推荐库

  • gopkg.in/natefinch/lumberjack.v2

示例

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

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

    log.Println("hello")
}

✅ 优点:

  • 自动切割
  • 自动 gzip
  • 不依赖系统

三、使用 zap + lumberjack(生产级)

如果你用 zap

writer := zapcore.AddSync(&lumberjack.Logger{
    Filename:   "/var/log/myapp/app.log",
    MaxSize:    50,
    MaxBackups: 10,
    MaxAge:     30,
    Compress:   true,
})

core := zapcore.NewCore(
    zapcore.JSONEncoder{},
    writer,
    zap.InfoLevel,
)
logger := zap.New(core)

四、手动压缩(不推荐长期使用)

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

或定时任务:

0 0 * * * gzip /var/log/myapp/*.log.old

五、选择建议

场景 推荐
简单服务 logrotate
容器 / 无 root lumberjack
高并发日志 zap + lumberjack
不想改代码 logrotate

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

  • Go 日志路径
  • 是否容器运行
  • 日志量(MB/天)

我可以帮你写 精准配置

0