温馨提示×

debian golang日志太多怎清理

小樊
38
2026-09-25 11:03:50
栏目: 编程语言

在 Debian 上,Golang 程序产生的“日志太多”通常分 两种情况,先确认是哪一种,再对症下药。


一、系统日志太多(journal / rsyslog / logrotate)

1. 查看日志占用

journalctl --disk-usage
du -sh /var/log

2. 清理 systemd 日志

# 只保留最近 100MB
journalctl --vacuum-size=100M

# 只保留最近 7 天
journalctl --vacuum-time=7d

3. 限制 journal 日志大小(推荐)

编辑:

sudo vim /etc/systemd/journald.conf

修改:

SystemMaxUse=200M
MaxRetentionSec=7day

重启:

sudo systemctl restart systemd-journald

4. logrotate(程序写到 /var/log)

如果是自写 Golang 程序:

/etc/logrotate.d/yourapp

示例:

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

二、Golang 程序自身日志太多(代码层面)

1. 控制日志级别(最重要)

不要一直 log.Println

✅ 推荐用日志库:

  • log/slog(Go 1.21+,官方)
  • zap
  • logrus

示例(slog):

logger := slog.New(slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{
    Level: slog.LevelWarn,
}))

2. 日志轮转(不自己写文件)

用 lumberjack:

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

log.SetOutput(&lumberjack.Logger{
    Filename:   "/var/log/yourapp/app.log",
    MaxSize:    50, // MB
    MaxBackups: 7,
    MaxAge:     7,
    Compress:   true,
})

3. 输出到 stdout,让系统管

最佳实践:

  • Golang 只输出到 stdout/stderr
  • 由 systemd / docker / k8s 管理日志

systemd service:

[Service]
StandardOutput=journal
StandardError=journal

三、Docker / Kubernetes 场景

如果是容器:

docker system prune -a

或限制:

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "3"

四、快速排查命令

# 看哪个日志最大
du -h /var/log | sort -h

# 看 journal 占用
journalctl --disk-usage

# 实时看 golang 日志
journalctl -u yourapp -f

建议总结

✅ 程序:只打必要日志(Warn+)
✅ 文件:用 lumberjack 轮转
✅ 系统:journal + logrotate 限制大小
✅ 容器:限制 max-size

如果你能告诉我:

  • 日志是 systemd / 文件 / docker
  • Golang 用的是 哪个日志库

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

0 踩