温馨提示×

debian golang日志怎样定位错误

小樊
44
2026-09-28 08:48:51
栏目: 编程语言

在 Debian 上用 Go(Golang) 开发或部署服务时,定位错误一般从 日志来源 + 工具 + 代码层 三个维度来做。下面给你一套实用思路。


一、先搞清楚日志“在哪里”

1. 系统服务(systemd)

如果 Go 程序是通过 systemd 启动的:

journalctl -u your-service-name -f

查看历史错误:

journalctl -u your-service-name --since "2024-01-01" --priority=err

2. 程序自己写日志

常见日志位置:

  • /var/log/your-app/
  • stdout / stderr
  • 自定义日志文件

查看:

tail -f /var/log/your-app/app.log

3. Docker 容器

docker logs -f container_name

二、Go 程序里如何“方便定位错误”

1. 使用 log 或 log/slog(推荐 Go 1.21+)

示例(slog):

import "log/slog"

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

日志示例:

time=... level=ERROR msg="db query failed" err="timeout" user_id=123

✅ 好处:

  • 带时间戳
  • 结构化,方便 grep
  • 可直接定位到业务参数

2. 错误要“带堆栈”(非常重要)

只用 errors.New 不够,推荐:

import "github.com/pkg/errors"

err := errors.Wrap(dbErr, "query user by id")

或 Go 1.20+:

import "errors"

err = fmt.Errorf("query user: %w", dbErr)

打印:

slog.Error("request failed", "err", err)

三、快速定位错误的常用命令

1. 按关键字搜错误

grep -i "error\|panic\|fatal" app.log

2. 看最近 100 行

tail -n 100 app.log

3. 实时看

tail -f app.log

四、Go 程序“崩溃”怎么查

1. Panic / 崩溃

  • 看日志里的:
panic: runtime error
goroutine 1 [running]
  • 用 panic 堆栈定位到:
    • 哪个函数
    • 第几行

2. 生成 core dump(高级)

ulimit -c unlimited

运行后:

gdb your-binary core

五、生产环境推荐组合

✅ 最佳实践:

  • systemd + journald
  • slog(结构化日志)
  • errors.Wrap
  • 日志级别(debug / info / warn / error)
  • 可选:filebeat → ES / Loki

六、你可以这样问我更具体的问题

你可以告诉我:

  1. Go 程序是怎么运行的?(systemd / docker / 直接跑)
  2. 日志是写到文件还是 stdout?
  3. 是 panic、逻辑错误、还是接口报错?

我可以给你针对你项目的具体定位方案。

0 踩