在 Debian 上运行的 Golang 程序日志,其“格式”主要取决于 你用的是什么日志库、是否走 systemd(journal)、以及 是否结构化(JSON / 文本)。下面按常见场景说明如何“解析”。
./myapp
或
journalctl -u myapp.service
Debian 默认用 systemd + journald
journalctl -u your-service.service
示例:
Mar 12 10:23:14 debian myapp[1234]: 2024/03/12 10:23:14 INFO request handled
log默认格式:
2024/03/12 10:23:14 message
解析方式
2006/01/02 15:04:05grep "ERROR" /var/log/myapp.log
或正则:
^(?P<time>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) (?P<msg>.*)$
logrus(非常常见)默认文本:
time="2024-03-12T10:23:14+08:00" level=info msg="request handled"
JSON 格式(推荐):
{"time":"2024-03-12T10:23:14+08:00","level":"info","msg":"request handled"}
解析 JSON 日志
journalctl -u myapp | jq '.msg'
或:
grep '"level":"error"' app.log | jq
zap(高性能,生产常用)JSON 示例:
{
"level":"info",
"ts":1710212594.123,
"caller":"main.go:42",
"msg":"request handled",
"status":200
}
解析
jq 'select(.level=="error")'
按时间:
jq 'select(.ts > 1710210000)'
不管 Go 用什么库,journalctl 都有元数据:
journalctl -o json -u myapp
字段:
__TIMESTAMPPRIORITY_PIDMESSAGE示例:
journalctl -o json | jq '.MESSAGE'
journalctl 或 fluent-bit / vector 转发jq(JSON)awk / grep(文本)journalctl -u myapp -o json \
| jq -r 'select(.MESSAGE | fromjson? | .level == "error")'
你可以贴一段 真实日志样例(或说明你用的是 log / logrus / zap / systemd),我可以直接给你 精确的正则或 jq 解析命令。