在 Debian 上配置 Go(Golang)日志,一般可以从应用层日志、系统级运行日志、日志轮转三个层面来做。下面按常见场景给你一套实用方案。
logpackage main
import (
"log"
"os"
)
func main() {
f, err := os.OpenFile("/var/log/myapp/app.log",
os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
defer f.Close()
log.SetOutput(f)
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("server started")
}
建议日志目录:
sudo mkdir -p /var/log/myapp
sudo chown -R youruser:youruser /var/log/myapp
import "github.com/sirupsen/logrus"
log := logrus.New()
log.SetFormatter(&logrus.JSONFormatter{})
import "go.uber.org/zap"
logger, _ := zap.NewProduction()
defer logger.Sync()
sudo nano /etc/systemd/system/myapp.service
[Unit]
Description=My Go App
After=network.target
[Service]
ExecStart=/opt/myapp/myapp
WorkingDirectory=/opt/myapp
User=myuser
Restart=on-failure
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
journalctl -u myapp -f
✅ 好处:不用自己管日志文件,systemd + journald 统一管
logrotate(最常用)sudo nano /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
rotate 14
compress
missingok
notifempty
copytruncate
}
测试:
sudo logrotate -d /etc/logrotate.d/myapp
使用 lumberjack:
import "gopkg.in/natefinch/lumberjack.v2"
log.SetOutput(&lumberjack.Logger{
Filename: "/var/log/myapp/app.log",
MaxSize: 10, // MB
MaxBackups: 7,
MaxAge: 30, // days
Compress: true,
})
✅ 最佳实践
/var/log/myapp)lumberjack 或 logrotatesystemd journalzap + jsonsudo apt install systemd
sudo chown -R myuser:myuser /var/log/myapp
如果你愿意,可以告诉我:
我可以直接给你一套完整配置模板。