在 CentOS 上排查 Golang 程序的错误日志,通常可以从程序自身日志、系统日志、进程管理工具、崩溃文件几个方向入手。下面按常见场景给你梳理一下。
很多 Go 程序会:
/var/log/xxx.log)查看方式:
# 如果前台运行
./yourapp
# 如果输出重定向了
cat /var/log/yourapp.log
tail -f /var/log/yourapp.log
Go 程序崩溃时通常会打印:
panic: runtime error: ...
goroutine 1 [running]:
main.main()
/path/main.go:10 +0x...
如果是后台运行,panic 信息可能在:
cat nohup.out
如果你是用 systemd 启动的:
journalctl -u yourapp.service
实时查看:
journalctl -u yourapp.service -f
只看错误:
journalctl -u yourapp.service -p err
systemctl status yourapp.service
/var/log/messages
/var/log/syslog # 某些版本
查看示例:
tail -f /var/log/messages
grep yourapp /var/log/messages
Go 程序容易因内存被 kill:
dmesg | grep -i oom
dmesg | grep -i kill
strace 排查strace -f -o /tmp/trace.log ./yourapp
在 Go 代码里加:
log.SetOutput(os.Stderr)
defer func() {
if r := recover(); r != nil {
log.Println("panic:", r)
}
}()
ulimit -c unlimited
ls -lh core*
gdb yourapp core
systemd 管理journalctl 查日志logrus / zap 写结构化日志如果你愿意,可以告诉我:
我可以给你更精确的排查命令。