温馨提示×

debian golang日志怎样定位问题

小樊
32
2026-09-22 09:56:35
栏目: 编程语言

在 Debian 上使用 Golang 时,定位问题主要依赖日志记录、运行时信息和系统工具。下面从「日志本身」到「系统级排查」给你一套实用思路。


一、Golang 日志基础定位

1. 使用标准库或成熟日志库

推荐:

  • log(标准库)
  • log/slog(Go 1.21+,结构化日志)
  • zap / logrus(生产环境常用)

示例(slog):

import "log/slog"

slog.Error("db query failed",
    "err", err,
    "user_id", uid,
)

✅ 关键点:

  • 打印 error
  • 打印 上下文信息(用户ID、请求ID、函数名)
  • 不要只打 err != nil

2. 日志中必须包含的信息

排查问题时,日志至少要有:

  • 时间(RFC3339)
  • 日志级别(INFO / WARN / ERROR)
  • 请求ID / traceID
  • 函数名或模块名
  • 错误堆栈(用 pkg/errorsfmt.Errorf + %w

二、在 Debian 上查看 Golang 程序日志

1. 前台运行

./your_app

2. systemd 服务(最常见)

如果服务是 systemd 管理的:

journalctl -u your_service -f
journalctl -u your_service --since "10 min ago"

查看崩溃:

journalctl -u your_service -p err

3. 日志文件

常见路径:

/var/log/your_app.log
/var/log/syslog

三、定位常见问题的实战方法

1. 程序直接崩溃(panic)

日志特征:

panic: runtime error: invalid memory address

定位:

journalctl -u your_service | grep panic

建议:

  • 使用 recover() 包裹 main / goroutine
  • 打印 stack:
debug.Stack()

2. 卡死 / 无响应

查看 goroutine 是否泄露:

curl http://localhost:6060/debug/pprof/goroutine

(需要开启 net/http/pprof


3. CPU / 内存占用高

top
htop

Go 专用:

go tool pprof http://localhost:6060/debug/pprof/profile

4. 端口占用

ss -ltnp | grep 8080

5. 权限问题(Debian 常见)

ls -l /var/log/your_app.log
id your_user

四、调试技巧(开发 & 生产)

1. 本地调试

dlv debug main.go

2. 远程调试(谨慎)

dlv exec ./your_app --headless

五、推荐日志规范(可直接用)

slog.Error("request failed",
    "trace_id", traceID,
    "path", r.URL.Path,
    "err", err,
)

systemd 环境建议:

  • 日志输出到 stdout
  • 让 journald 管理
  • 不要自己再写文件(除非合规需要)

六、快速排查清单 ✅

  • [ ] journalctl 是否有 ERROR / panic
  • [ ] 是否有请求ID
  • [ ] 是否打印了 error 而不是忽略
  • [ ] 是否开启了 pprof
  • [ ] 是否是权限 / 端口 / 配置问题

如果你愿意,可以:

  • 贴一段 具体日志
  • 或说明是 web / 后台服务 / CLI
  • 或说清楚 Debian 版本 + Go 版本

我可以直接帮你定位。

0