在 Debian 上使用 Go(Golang)时,“日志满”通常不是 Go 本身的问题,而是运行环境、部署方式或日志配置导致的。下面按常见原因系统地说明,并给出排查和解决建议。
如果你用 systemd 运行 Go 服务:
sudo journalctl -u your-go-service
journald 默认会一直存日志,可能占满 /var/log/journal。
检查:
du -sh /var/log/journal
解决:
sudo journalctl --vacuum-size=100M
限制 journald:
# /etc/systemd/journald.conf
SystemMaxUse=200M
很多 Go 程序直接用:
log.Println(...)
或:
os.OpenFile("/var/log/app.log", ...)
但没有日志切割(log rotation)。
结果:
解决:
logrotatelumberjack)logrotate 示例:
/var/log/app.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
典型问题:
for {
log.Println("error")
}
或:
表现:
解决:
即使你“没写文件”,systemd 也会把:
fmt.Println("...")
捕获进 journal。
解决:
如果是容器跑 Go:
docker logs container_id
Docker 默认 json-file 日志不限制。
解决:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
df -h
du -sh /var/log/*
lsof | grep log
journalctl --disk-usage
ps aux | grep your-go-app
✅ 使用日志库:
log/slog(Go 1.21+)zaplogrus✅ 配合:
lumberjacklogrotate✅ systemd 服务中:
StandardOutput=journal
StandardError=journal
你可以贴出:
我可以帮你精准定位是哪一种“满”。