在 Debian 上配置 Go(Golang)日志,通常分为系统层面和应用层面两部分。下面按常见场景给你一个清晰、可操作的说明。
Go 标准库自带 log 包,也可以用数学库/第三方库(如 logrus、zap)。
package main
import (
"log"
"os"
)
func main() {
file, err := os.OpenFile("/var/log/myapp.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()
log.SetOutput(file)
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("application started")
}
go get github.com/sirupsen/logrus
import "github.com/sirupsen/logrus"
func main() {
log := logrus.New()
file, _ := os.OpenFile("/var/log/myapp.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
log.SetOutput(file)
log.SetFormatter(&logrus.JSONFormatter{})
log.Info("hello from logrus")
}
如果你的 Go 程序通过 systemd 运行(推荐方式),日志可以直接交给 journald。
sudo vim /etc/systemd/system/myapp.service
内容示例:
[Unit]
Description=My Go App
After=network.target
[Service]
ExecStart=/opt/myapp/myapp
WorkingDirectory=/opt/myapp
User=myapp
Restart=on-failure
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reexec
sudo systemctl enable myapp
sudo systemctl start myapp
journalctl -u myapp -f
✅ 优点:
如果你自己写日志文件(非 systemd 日志):
sudo vim /etc/logrotate.d/myapp
示例:
/var/log/myapp.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
sudo logrotate -d /etc/logrotate.d/myapp
✅ 最佳实践
如果你愿意,我可以:
你现在是开发环境还是服务器部署?