在 Debian 上使用 Golang 时,定位问题主要依赖日志记录、运行时信息和系统工具。下面从「日志本身」到「系统级排查」给你一套实用思路。
推荐:
log(标准库)log/slog(Go 1.21+,结构化日志)zap / logrus(生产环境常用)示例(slog):
import "log/slog"
slog.Error("db query failed",
"err", err,
"user_id", uid,
)
✅ 关键点:
errorerr != nil排查问题时,日志至少要有:
pkg/errors 或 fmt.Errorf + %w)./your_app
如果服务是 systemd 管理的:
journalctl -u your_service -f
journalctl -u your_service --since "10 min ago"
查看崩溃:
journalctl -u your_service -p err
常见路径:
/var/log/your_app.log
/var/log/syslog
日志特征:
panic: runtime error: invalid memory address
定位:
journalctl -u your_service | grep panic
建议:
recover() 包裹 main / goroutinedebug.Stack()
查看 goroutine 是否泄露:
curl http://localhost:6060/debug/pprof/goroutine
(需要开启 net/http/pprof)
top
htop
Go 专用:
go tool pprof http://localhost:6060/debug/pprof/profile
ss -ltnp | grep 8080
ls -l /var/log/your_app.log
id your_user
dlv debug main.go
dlv exec ./your_app --headless
slog.Error("request failed",
"trace_id", traceID,
"path", r.URL.Path,
"err", err,
)
systemd 环境建议:
如果你愿意,可以:
我可以直接帮你定位。