分析 Linux 上 Golang 服务的日志,通常可以从日志来源、工具方法、分析思路、常见问题定位四个维度来做。下面给你一个比较系统的总结。
Golang 日志一般有几种形式:
标准输出 / 标准错误
fmt.Printlnlog.Println日志文件
系统层日志
journalctl(systemd 服务)/var/log/messagesdmesg(OOM、崩溃)运行时日志
tail -f app.log
journalctl -u mygo.service -f
grep ERROR app.log
grep -i "timeout" app.log
sed -n '/2026-01-21 10:00/,/2026-01-21 11:00/p' app.log
journalctl --since "10 min ago"
grep ERROR app.log | wc -l
建议日志中包含:
INFOWARNERRORFATAL例如:
2026-01-21 10:12:33 ERROR db query failed: timeout
分析时优先看:
Golang panic 示例:
panic: runtime error: invalid memory address
goroutine 1 [running]:
main.main()
/app/main.go:23 +0x45
重点看:
日志中常见信号:
all goroutines are asleep可结合:
go tool pprof
go tool trace
grep / awk / sedless -S(不换行看长日志)jq(JSON 日志)cat app.log | jq 'select(.level=="error")'
如果是生产环境:
适合:
zap / slog(结构化日志)pprofexpvartrace看:
journalctl -u goapp.service
看:
dmesg)trace_id / request_id 聚合✅ 结构化(JSON)
✅ 包含:
示例:
{
"time": "2026-01-21T10:00:00Z",
"level": "error",
"service": "order",
"trace_id": "abc123",
"msg": "db timeout"
}
如果你愿意,可以:
我可以直接帮你做具体日志分析。