在 Debian 上运行 Golang 程序时,“日志怎么导出”通常有以下几种场景。下面按常见用法给你说明。
logpackage main
import (
"log"
"os"
)
func main() {
log.SetOutput(os.Stdout)
log.Println("hello log")
}
运行:
go run main.go
./your_program > app.log 2>&1
>:标准输出2>&1:错误输出也写入后台运行:
nohup ./your_program > app.log 2>&1 &
# /etc/systemd/system/myapp.service
[Unit]
Description=My Go App
After=network.target
[Service]
ExecStart=/opt/myapp/myapp
WorkingDirectory=/opt/myapp
User=www-data
Restart=always
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start myapp
systemctl enable myapp
journalctl -u myapp -f
导出日志:
journalctl -u myapp > myapp.log
程序写文件:
logFile, _ := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
log.SetOutput(logFile)
logrotate 配置:
# /etc/logrotate.d/myapp
/var/log/myapp.log {
daily
rotate 7
compress
missingok
notifempty
}
使用 zap / logrus:
import "github.com/sirupsen/logrus"
func main() {
logrus.SetFormatter(&logrus.JSONFormatter{})
logrus.WithField("module", "main").Info("start")
}
可配合:
journalctl/var/log/xxx.log确保:
stderr 被捕获如果你能说明:
我可以给你更精确的方案。