温馨提示×

golang日志在debian如何排查

小樊
39
2026-09-28 08:44:53
栏目: 编程语言

在 Debian 上排查 Golang 程序日志问题,一般可以从「程序自身日志 → 系统/服务日志 → 运行环境 → 调试手段」几个层面来做。下面按常见场景给你一个系统性的排查思路。


一、确认 Golang 程序是怎么运行的

先搞清楚程序运行方式,不同方式日志位置不同:

  • 直接命令行运行
    ./app
    
  • systemd 服务
    systemctl status yourapp
    
  • 容器(Docker)
    docker logs container_name
    
  • 后台 nohup / screen
    nohup ./app > app.log 2>&1 &
    

二、Golang 自身日志排查

1. 看程序是否真的有日志输出

常见日志库:

  • log(标准库)
  • logrus
  • zap
  • slog(Go 1.21+)

检查代码中是否:

log.SetOutput(os.Stdout)

或:

log.SetOutput(file)

如果输出到文件,确认:

ls -l /var/log/yourapp.log
tail -f /var/log/yourapp.log

2. 没日志?可能是这些原因

  • 日志级别太高(只打 Error,没打 Info)
  • 程序 panic 前没 flush
  • 输出被重定向
  • 程序根本没启动成功

三、Debian 系统日志排查(非常重要)

1. systemd 服务日志(最常见)

如果程序是 systemd 管理的:

journalctl -u yourapp.service -f
journalctl -u yourapp.service --since "10 min ago"

查看是否:

  • 启动失败
  • OOM
  • 权限问题

2. 系统级日志

sudo tail -f /var/log/syslog
sudo tail -f /var/log/messages   # 某些 Debian 版本

常见错误:

  • permission denied
  • address already in use
  • out of memory

四、进程与资源排查

1. 程序是否在运行

ps aux | grep yourapp

2. 端口占用

ss -tulnp | grep 8080

3. 文件/目录权限

ls -ld /var/log
ls -l /var/log/yourapp.log

Golang 常因:

  • 非 root 用户写 /var/log
  • systemd 的 ProtectSystem=strict

五、Golang 特有排查技巧

1. 捕获 panic 日志

defer func() {
    if r := recover(); r != nil {
        log.Println("panic:", r)
    }
}()

或运行:

GOTRACEBACK=all ./app

2. 环境变量调试

GODEBUG=http2debug=2 ./app
GODEBUG=schedtrace=1000 ./app

3. 编译信息

go version
file yourapp
ldd yourapp   # 静态/动态链接问题

六、实战排查流程(推荐顺序)

  1. systemctl status yourapp
  2. journalctl -u yourapp -f
  3. ps aux | grep yourapp
  4. 检查日志文件路径 & 权限
  5. 手动运行程序看输出
  6. 加 -log.level=debug 或类似参数
  7. 用 strace 看系统调用(极端情况)

七、常见坑总结

问题 原因
没日志 输出到 stdout 被 systemd 吞
权限错误 Debian 严格权限
OOM Go 内存占用高
时区不对 Debian 时区未设置
日志不刷 未 flush / 缓冲

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

  • 程序怎么运行的(systemd / docker / 直接跑)
  • 用的什么日志库
  • 具体现象(没日志 / 报错 / 崩溃)

我可以给你更精准的命令和配置示例。

0 踩