温馨提示×

如何压缩linux golang日志

小樊
44
2026-09-05 15:20:13
栏目: 编程语言

在 Linux 下对 Golang 日志进行压缩,常见做法有三类:应用内压缩、日志轮转+压缩、系统级压缩。下面按实用程度给你总结。


一、应用内直接压缩(推荐:写入即压缩)

如果你用的是标准 log 或 zap / logrus,可以包一层 gzip Writer。

示例(gzip 写日志)

package main

import (
	"compress/gzip"
	"log"
	"os"
)

func main() {
	f, _ := os.Create("app.log.gz")
	gz := gzip.NewWriter(f)

	logger := log.New(gz, "", log.LstdFlags)
	logger.Println("hello compressed log")

	gz.Close()
	f.Close()
}

✅ 优点

  • 日志本身就是压缩文件
  • 不占额外磁盘

❌ 缺点

  • 不能直接 tail 看

二、日志轮转 + 自动压缩(最常用 ✅)

1️⃣ 使用 lumberjack(Go 生态最流行)

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

logger := &lumberjack.Logger{
	Filename:   "/var/log/app.log",
	MaxSize:    10, // MB
	MaxBackups: 5,
	MaxAge:     7,  // 天
	Compress:   true, // ✅ 自动 gzip
}

生成文件如:

app-2026-01-21.log.gz

✅ 优点

  • 零运维
  • 自动压缩、清理

2️⃣ 使用 logrotate(Linux 系统级)

/etc/logrotate.d/app:

/var/log/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

✅ 适合:

  • 已有 Go 程序
  • 不想改代码

三、手动压缩已有日志

# 单文件
gzip app.log

# 批量
find /var/log/app -name "*.log" -exec gzip {} \;

四、ZIP / ZSTD(更高压缩比)

ZSTD(Linux 推荐)

zstd app.log

Go 支持:

import "github.com/klauspost/compress/zstd"

五、选型建议

场景 推荐方案
Go 服务 lumberjack + Compress
已上线不改代码 logrotate
极致压缩 zstd
审计日志 gzip + 长期保留

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

  • 用的日志库(zap / logrus / 原生)
  • 是否容器 / K8s
  • 日志量(GB/天)

我可以直接给你一套 可落地的配置。

0 踩