在 Debian 上“开启 Golang 日志”一般有几种常见理解,我分别说明,你可以对照自己的场景:
Go 标准库自带 log 包,不需要额外安装。
package main
import (
"log"
)
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("程序启动")
}
运行:
go run main.go
logFile, err := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
log.Fatal(err)
}
log.SetOutput(logFile)
确保目录可写:
sudo mkdir -p /var/log/myapp
sudo chown $USER:$USER /var/log/myapp
如果是作为服务运行,日志交给 systemd/journald 最规范。
go build -o /opt/myapp/myapp
sudo nano /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=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
查看日志:
journalctl -u myapp -f
go get github.com/sirupsen/logrus
import "github.com/sirupsen/logrus"
func main() {
logrus.SetFormatter(&logrus.JSONFormatter{})
logrus.Info("hello debian")
}
没有,Go 程序自己控制日志输出位置。
logrotatejournalctl 自动管理如果你能告诉我:
我可以直接给你一份可复制的配置。