温馨提示×

怎么解析debian golang日志

小樊
52
2026-09-13 04:41:13
栏目: 编程语言

在 Debian 上运行 Go(Golang)程序时,“解析日志”通常指查看、过滤、分析 Go 程序产生的日志文件或 systemd/journal 日志。下面按常见场景给你一套实用方法。


一、Go 日志常见来源

1. 程序自己写日志文件

例如:

log.SetOutput(os.OpenFile("/var/log/myapp.log", ...))

2. 输出到 stdout / stderr

  • 直接运行:终端
  • systemd 服务:journald

二、直接解析日志文件(最常用)

1. 基础查看

cat /var/log/myapp.log
less /var/log/myapp.log
tail -f /var/log/myapp.log

2. 按关键字过滤

grep ERROR /var/log/myapp.log
grep -i "timeout" /var/log/myapp.log

3. 按时间范围

grep "2026-01-21 10:" /var/log/myapp.log

4. 统计错误数量

grep -c ERROR /var/log/myapp.log

三、systemd 下的 Go 日志解析(推荐)

如果 Go 程序作为 systemd 服务运行:

查看日志

journalctl -u myapp.service
journalctl -u myapp.service -f

按时间

journalctl -u myapp.service --since "2026-01-21 10:00"

按级别(Go 日志通常无 syslog 级别)

journalctl -u myapp.service | grep ERROR

四、结构化日志解析(JSON 日志)

如果 Go 使用 logrus / zap 输出 JSON:

示例日志

{"level":"error","msg":"db timeout","time":"2026-01-21T10:00:00Z"}

用 jq 解析

jq 'select(.level=="error")' /var/log/myapp.log

提取字段

jq '.msg' /var/log/myapp.log

五、Go 日志格式规范化建议(便于解析)

推荐格式

时间 [级别] 模块: 消息
2026-01-21 10:00:00 [ERROR] db: connection failed

Go 示例

log.SetFlags(0)
log.Printf("%s [%s] %s: %s", time.Now().Format(time.RFC3339), "ERROR", "db", "failed")

六、高级分析工具(可选)

  • lnav:日志浏览器
    lnav /var/log/myapp.log
    
  • Go 自写解析器
    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
        line := scanner.Text()
        // regex / json 解析
    }
    

七、常见坑

  • Go log 默认不带级别 → 建议自定义
  • systemd 会截断多行日志
  • 时间用 UTC 还是本地时间要统一

如果你愿意,可以:

  • 贴一段 Go 日志样例
  • 说明是 文件 / systemd / k8s
  • 告诉我你想 统计 / 告警 / 实时分析

我可以直接帮你写解析脚本或正则。

0 踩