在 Debian 上排查 Golang 日志问题,通常可以按“日志在哪 → 日志为什么没输出/不对 → 运行时环境是否有问题”的思路来定位。下面给你一套实用方法。
常见情况:
/var/log/xxx.log)log、zap、logrus、slog先确认代码里日志输出方式:
log.Println("hello")
fmt.Println("debug")
如果是 Debian 11/12 用 systemd 启动:
journalctl -u your-service.service -f
查看是否真的有日志。
ps aux | grep your-program
systemctl status your-service
如果没运行,日志自然没有。
./your-program
观察终端输出。
./your-program > /tmp/go.log 2>&1
cat /tmp/go.log
这样可以排除 systemd 干扰。
很多库默认只输出 info/warn/error
例如:
logrus 默认 Infozap 默认 Infoslog 默认 Info检查:
log.SetFlags(log.LstdFlags | log.Lshortfile)
fmt.Println 在管道下可能缓冲解决:
log.SetOutput(os.Stdout)
或强制 flush(日志库一般自动)
Debian 上:
检查:
journalctl -u your-service --no-pager | tail -50
程序写相对路径日志:
logfile, _ := os.OpenFile("app.log", ...)
但 systemd 工作目录可能是 /
解决:
WorkingDirectory=/opt/app
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
你可以补充:
我可以直接给你具体命令和配置。