在 Debian 上排查 Golang 日志异常,通常可以从 日志来源、运行方式、系统环境、代码行为 四个层面入手。下面给你一套比较实用的定位思路。
先明确是哪一种异常:
不同表现,排查路径不一样。
在 Debian 上常见运行方式:
systemctl status your-service
journalctl -u your-service -f
重点看:
StandardOutput、StandardError./your-app 2>&1 | tee run.log
确认:
docker logs container_id
注意:
log 默认输出到 stderr常见坑点:
log.Println("xxx")
默认输出到 stderr,不是 stdout。
如 zap / logrus / slog:
WithCaller / WithStack示例(slog):
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
bufio.Writer 没 Flush()✅ 建议:
df -h
ls -l /var/log/your-app
常见问题:
timedatectl
Go 程序里:
log.SetFlags(log.LstdFlags | log.LUTC)
journalctl --disk-usage
可能日志被自动清理。
你可以按顺序执行:
ps aux | grep your-app
log.Println("DEBUG START")
你可以补充:
我可以直接帮你定位到具体原因。