温馨提示×

怎样压缩debian golang日志

小樊
42
2026-10-07 02:34:56
栏目: 编程语言

在 Debian 上压缩 Go 应用产生的日志,常见做法有日志轮转+压缩、Go 程序内压缩、以及系统层面定时压缩。下面按实用程度给你几种方案。


一、使用 logrotate(最推荐,Debian 自带)

Debian 自带 logrotate,非常适合压缩 Golang 日志。

示例

假设你的 Go 日志在 /var/log/myapp/

sudo apt install logrotate

新建配置:

sudo nano /etc/logrotate.d/myapp

内容示例:

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

说明

  • compress:用 gzip 压缩
  • daily:每天轮转
  • rotate 14:保留 14 份
  • copytruncate:不重启 Go 程序也能截断日志(对 Go 很友好)

测试

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

二、Go 程序内使用日志库(自动压缩)

如果你能改 Go 代码,推荐用成熟日志库。

1. lumberjack(最常用)

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

logger := &lumberjack.Logger{
    Filename:   "/var/log/myapp/app.log",
    MaxSize:    10, // MB
    MaxBackups: 7,
    MaxAge:     14, // days
    Compress:   true, // gzip
}

✅ 自动切割 + 压缩
✅ 不用 logrotate
❌ 需改代码


三、cron + gzip 手动压缩(简单粗暴)

如果不想用 logrotate:

0 0 * * * gzip -k /var/log/myapp/app.log && > /var/log/myapp/app.log

或更安全:

0 0 * * * mv /var/log/myapp/app.log /var/log/myapp/app-$(date +\%F).log && gzip /var/log/myapp/app-*.log

⚠️ 注意:直接清空日志可能导致 Go 写文件句柄失效,建议配合 copytruncate 或重启。


四、systemd 服务日志(journalctl)

如果你的 Go 是 systemd 服务:

journalctl -u myapp.service

压缩由 systemd 自动处理:

sudo nano /etc/systemd/journald.conf
Compress=yes

推荐方案总结

场景 推荐
不改代码 logrotate
可改 Go 代码 lumberjack
容器/K8s 日志库 + 外部收集
systemd 服务 journald

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

  • 日志路径
  • 是否可改 Go 代码
  • 是否在 Docker / systemd 中运行

我可以给你精确配置。

0 踩