在 Debian 上排查 Golang 程序异常日志,一般可以从下面几个层面入手:
如果程序用了 log.Println / log.Fatal:
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("something wrong")
日志会直接输出到 stdout / stderr 或你重定向的文件。
查看方式:
cat /var/log/your_app.log
tail -f /var/log/your_app.log
Go 程序 panic 时,会打印类似:
panic: runtime error: invalid memory address or nil pointer dereference
goroutine 1 [running]:
main.main()
/path/main.go:20 +0x45
常见查看位置:
如果你用 systemd 管理 Go 程序:
journalctl -u your_service.service
实时查看:
journalctl -u your_service.service -f
只看错误:
journalctl -u your_service.service -p err
查看最近 100 行:
journalctl -u your_service.service -n 100
systemctl status your_service
ps aux | grep your_app
ss -tulnp | grep your_port
dmesg | tail
free -h
top
| 异常类型 | 日志位置 |
|---|---|
| panic | stdout / journalctl |
| 未捕获 error | 你自己写的日志 |
| OOM 被杀 | dmesg / journalctl |
| 权限问题 | journalctl -p err |
| 配置文件错误 | 应用启动日志 |
defer func() {
if r := recover(); r != nil {
log.Println("panic:", r)
}
}()
如果你愿意,可以告诉我:
我可以直接帮你写一条精准的排查命令。