在 Debian 上排查 Golang 日志,一般可以从 应用日志、系统日志、运行环境、崩溃信息 几个层面入手。下面按实战顺序说明。
常见情况:
stdout / stderr)/var/log/xxx.log)先看启动方式:
ps aux | grep your_app
如果是直接运行:
./yourapp >> /var/log/yourapp.log 2>&1
查看日志:
tail -f /var/log/yourapp.log
如果你用 systemd 管理 Golang 服务:
systemctl status yourapp.service
journalctl -u yourapp.service -f
查看最近 100 行:
journalctl -u yourapp.service -n 100
带时间:
journalctl -u yourapp.service --since "10 min ago"
Golang panic 一般会输出到 stderr,例如:
panic: runtime error: invalid memory address
goroutine 1 [running]:
main.main()
如果是 systemd:
journalctl -u yourapp.service | grep panic
在代码中:
log.SetOutput(os.Stderr)
或写文件:
f, _ := os.OpenFile("/var/log/yourapp.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
log.SetOutput(f)
如果程序直接挂掉:
ulimit -c unlimited
或 systemd:
[Service]
LimitCORE=infinity
coredumpctl list
coredumpctl gdb <pid>
tail -f /var/log/syslog
或:
journalctl -f
dmesg | grep -i oom
journalctl | grep -i "out of memory"
ss -lntp | grep 8080
iptables -L
ufw status
log.SetFlags(log.LstdFlags | log.Lshortfile)
logger.Error("db error", zap.Error(err))
import _ "net/http/pprof"
go tool pprof http://localhost:6060/debug/pprof/goroutine
✅ 程序起不来
→ journalctl -u 服务名
✅ 运行中崩溃
→ 看 panic / coredump
✅ 无日志
→ 确认 stdout/stderr 重定向
✅ 性能问题
→ pprof + dmesg
如果你愿意,可以直接把:
贴出来,我可以帮你精准定位问题。