在 Debian 上,Golang 程序产生的“日志太多”通常分 两种情况,先确认是哪一种,再对症下药。
journalctl --disk-usage
du -sh /var/log
# 只保留最近 100MB
journalctl --vacuum-size=100M
# 只保留最近 7 天
journalctl --vacuum-time=7d
编辑:
sudo vim /etc/systemd/journald.conf
修改:
SystemMaxUse=200M
MaxRetentionSec=7day
重启:
sudo systemctl restart systemd-journald
如果是自写 Golang 程序:
/etc/logrotate.d/yourapp
示例:
/var/log/yourapp/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
不要一直 log.Println
✅ 推荐用日志库:
log/slog(Go 1.21+,官方)zaplogrus示例(slog):
logger := slog.New(slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{
Level: slog.LevelWarn,
}))
用 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,
})
最佳实践:
stdout/stderrsystemd service:
[Service]
StandardOutput=journal
StandardError=journal
如果是容器:
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
如果你能告诉我:
我可以给你一套 直接可抄的配置。