在 Debian 系统上解析 Golang 日志,通常可以从日志来源、格式、工具链几个层面来处理。下面按“从简单到专业”的方式给你一个完整思路。
Golang 常见日志来源:
loglogruszapslog(Go 1.21+)示例(logrus):
{"level":"info","msg":"user login","time":"2024-01-01T12:00:00Z","user":"alice"}
示例(zap):
{"ts":1700000000,"level":"info","caller":"main.go:20","msg":"start server"}
tail -f /var/log/myapp/app.log
less /var/log/myapp/app.log
如果 Golang 程序是用 systemd 管理的:
journalctl -u myapp.service -f
journalctl -u myapp.service --since "1 hour ago"
导出成文件:
journalctl -u myapp.service > app.log
grep ERROR app.log
grep -i "timeout" app.log
awk '/2024-01-01 12:00/,/2024-01-01 13:00/' app.log
如果日志是 JSON 格式:
jqjq '. | select(.level=="error")' app.log
提取字段:
jq '{time, msg, user}' app.log
统计错误数量:
jq -r 'select(.level=="error") | .msg' app.log | sort | uniq -c
lnav(非常好用)sudo apt install lnav
lnav /var/log/myapp/app.log
goaccess(适合 Web 日志)sudo apt install goaccess
goaccess app.log -o report.html
如果是服务器集群:
典型架构:
Golang → JSON 日志 → filebeat → Elasticsearch → Kibana
log.Println("user login") // ❌
logrus.WithField("user", "alice").Info("user login") // ✅
DEBUG < INFO < WARN < ERROR < FATAL
# 1. 查看实时日志
journalctl -u myapp -f
# 2. 导出并解析错误
journalctl -u myapp | jq 'select(.level=="error")'
# 3. 统计高频错误
journalctl -u myapp | jq -r '.msg' | sort | uniq -c | sort -nr
如果你愿意,可以:
我可以直接帮你写解析脚本或正则。