在 Debian 上“抓取 Golang 日志”通常指以下几种场景之一,下面按常见用法分别说明,你可以对照自己的情况选择。
如果是用 log.Println / fmt.Println 等:
log.Println("hello")
Debian 上运行方式:
./myapp > /var/log/myapp.log 2>&1 &
查看日志:
tail -f /var/log/myapp.log
log.SetOutput(os.OpenFile("/var/log/myapp.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644))
直接读取:
tail -f /var/log/myapp.log
如果你在 Debian 上用 systemd 管理服务:
# /etc/systemd/system/myapp.service
[Unit]
Description=Golang App
After=network.target
[Service]
ExecStart=/opt/myapp/myapp
User=myapp
Restart=always
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start myapp
systemctl enable myapp
journalctl -u myapp -f
查看历史:
journalctl -u myapp --since "2024-01-01"
logruszapslog(Go 1.21+)示例(zap):
logger, _ := zap.NewProduction()
logger.Info("server started")
日志位置由配置决定,可输出到:
tail -f /var/log/myapp.log
grep ERROR /var/log/myapp.log
strace -e write -p <pid>
docker logs -f myapp
/var/log 是否可写如果你愿意,可以告诉我:
我可以给你一套精确方案(包括日志轮转、ELK / Loki 方案)。