在 Debian 上用 Go 写程序时“日志为空”,通常不是 Debian 本身的问题,而是日志写到哪里、程序是否真的运行、以及输出被谁吞掉了这几类原因。下面按常见情况给你一个排查清单。
log 包,但没看到输出Go 标准库 log 默认输出到 标准错误(stderr),不是 stdout。
log.Println("hello")
如果你这样运行:
./app > out.log
那么日志会进 stderr,不在 out.log 里。
✅ 正确方式:
./app > out.log 2>&1
或只看 stderr:
./app 2> err.log
如果你在 Debian 用 systemd 跑 Go 程序:
[Service]
ExecStart=/opt/app/app
日志不会写文件,而是进 journald。
查看日志:
journalctl -u your-service -f
如果你在代码里用 log.Println,它会自动进 journal。
✅ 确认:
systemctl status)/dev/null常见原因:
os.Exit() 在日志前panic 在 init 里建议加早期日志:
func main() {
log.Println("start")
}
如果这一行都没有,说明:
比如:
log.SetOutput(os.OpenFile("app.log", ...))
但:
/✅ 用绝对路径:
log.SetOutput(os.OpenFile("/var/log/app.log", ...))
并确保:
如果你用:
bufio.WriterFlush()程序退出时日志会丢。
✅ 确保:
log / zap(自带同步)docker logslog.Println("start")?如果你愿意,可以把:
贴出来,我可以直接帮你定位是哪一条。