温馨提示×

debian golang日志怎么排查

小樊
47
2026-10-07 02:37:55
栏目: 编程语言

在 Debian 上排查 Golang 程序日志,通常可以从日志来源、日志位置、运行方式、排查工具几个层面来做。下面按实战场景给你一个清晰路线。


一、先确认:日志到底打在哪?

1. 程序自己打印的日志

Go 程序常见日志方式:

  • log.Println / log.Fatal
  • fmt.Println
  • zap / logrus / slog

看代码里有没有指定输出文件:

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

如果没有指定,默认是:

  • 标准输出(stdout)
  • 标准错误(stderr)

二、不同运行方式,日志位置不同

✅ 1. 直接命令行运行

go run main.go
# 或
./myapp

日志直接打印在终端

排查:

./myapp 2>&1 | tee run.log

✅ 2. systemd 服务(最常见)

如果你是用 systemd 管理的:

systemctl status myapp
journalctl -u myapp

看实时日志:

journalctl -u myapp -f

看某次启动:

journalctl -u myapp -b

⚠️ 注意:
Go 日志默认进 journal,不会自动写文件


✅ 3. Docker 容器

docker logs myapp
docker logs -f myapp

如果日志被重定向到文件:

docker exec -it myapp sh
cat /var/log/myapp.log

✅ 4. 后台 nohup / screen

nohup ./myapp > app.log 2>&1 &

查看:

tail -f app.log

三、Debian 系统级日志排查

1. 系统日志

tail -f /var/log/syslog

(Debian 默认用 rsyslog)

2. 内核 / 崩溃

dmesg | tail

OOM 被杀常见:

Out of memory: Kill process (go)

四、Go 程序常见日志问题排查

1. 程序没日志?

检查:

  • 是否 panic 但被 recover
  • 是否日志级别太高(Info 没开 Debug)
  • 是否输出到错误的 io.Writer

快速验证:

log.Println("test log")

2. 程序一启动就退出

journalctl -u myapp -n 50

常见原因:

  • 配置路径不存在
  • 端口被占用
  • 权限不足(/var/log 写不了)

3. 权限问题(Debian 很常见)

ls -l /var/log/myapp.log
sudo chown myapp:myapp /var/log/myapp.log

五、推荐的生产级日志方案

Go 侧

  • log/slog(Go 1.21+)
  • zap(高性能)

系统侧

  • systemd + journald
  • 或:
/var/log/myapp/access.log
/var/log/myapp/error.log

六、排查清单(直接照做)

# 1. 看服务状态
systemctl status myapp

# 2. 看日志
journalctl -u myapp -f

# 3. 看系统日志
tail -f /var/log/syslog

# 4. 看进程
ps aux | grep myapp

# 5. 看端口
ss -lntp | grep :8080

如果你愿意,可以告诉我:

  • ✅ Debian 版本
  • ✅ Go 程序怎么运行的(systemd / docker / 直接跑)
  • ✅ 用的什么日志库

我可以直接帮你定位 具体该看哪个日志文件。

0 踩