温馨提示×

怎么定位debian golang日志问题

小樊
34
2026-09-16 08:24:56
栏目: 编程语言

在 Debian 上排查 Golang 日志问题,通常可以按“日志在哪 → 日志为什么没输出/不对 → 运行时环境是否有问题”的思路来定位。下面给你一套实用方法。


一、先确认日志“应该在哪里”

1. 应用自己写的日志

常见情况:

  • 写到 stdout / stderr
  • 写到 文件(如 /var/log/xxx.log
  • 用日志库:logzaplogrusslog

先确认代码里日志输出方式:

log.Println("hello")
fmt.Println("debug")

2. systemd 服务(最常见)

如果是 Debian 11/12 用 systemd 启动:

journalctl -u your-service.service -f

查看是否真的有日志。


二、确认程序是否真的在运行

ps aux | grep your-program
systemctl status your-service

如果没运行,日志自然没有。


三、手动运行程序,看原始日志

1. 直接运行

./your-program

观察终端输出。

2. 重定向日志到文件

./your-program > /tmp/go.log 2>&1
cat /tmp/go.log

这样可以排除 systemd 干扰。


四、常见问题定位清单

✅ 1. 日志级别问题

很多库默认只输出 info/warn/error

例如:

  • logrus 默认 Info
  • zap 默认 Info
  • slog 默认 Info

检查:

log.SetFlags(log.LstdFlags | log.Lshortfile)

✅ 2. 日志被缓冲(非常常见)

  • fmt.Println 在管道下可能缓冲
  • HTTP 服务中日志延迟

解决:

log.SetOutput(os.Stdout)

或强制 flush(日志库一般自动)


✅ 3. systemd 吞日志

Debian 上:

  • stdout → journald
  • 文件权限问题

检查:

journalctl -u your-service --no-pager | tail -50

✅ 4. 工作目录不对

程序写相对路径日志:

logfile, _ := os.OpenFile("app.log", ...)

但 systemd 工作目录可能是 /

解决:

  • 用绝对路径
  • 或设置:
WorkingDirectory=/opt/app

✅ 5. 权限问题

ls -l /var/log/your.log
sudo -u your-user cat /var/log/your.log

五、快速排错模板(推荐)

# 1. 看服务状态
systemctl status your-service

# 2. 看日志
journalctl -u your-service -f

# 3. 手动跑
cd /opt/yourapp
./yourapp > /tmp/test.log 2>&1
cat /tmp/test.log

六、如果你愿意,我可以更精准帮你

你可以补充:

  1. 怎么启动的(systemd / docker / 手动)
  2. 用的什么日志库
  3. 日志“没有”还是“不对”
  4. Debian 版本

我可以直接给你具体命令和配置

0