“Debian 上 Golang 程序没有日志”通常不是 Go 语言本身的问题,而是运行环境、配置或日志输出方式导致的。下面按常见原因给你一个系统排查清单。
在 Debian(尤其是 systemd 服务)中:
fmt.Println / log.Println → 默认输出到 stderr./app
应该能看到journalctl -u your-service -f
✅ 检查:
journalctl -u your-service
Go 默认:
log.Println("hello")
输出到 stderr
但如果你做了:
log.SetOutput(io.Discard)
或者:
log.SetOutput(file)
而文件没权限 / 路径不存在 → 没日志
✅ 检查:
log.SetOutput(os.Stderr)
典型的 Debian 服务:
[Service]
ExecStart=/opt/app/app
✅ 推荐配置:
StandardOutput=journal
StandardError=journal
否则日志可能“消失”。
例如:
nohup ./app &
日志可能:
✅ 检查:
cat nohup.out
如:
log.SetLevel(log.WarnLevel)
→ Info / Debug 不输出
✅ 检查日志库配置(zap / logrus / slog)
/var/log✅ 检查:
ls -l /var/log/yourapp
sudo -u appuser touch /var/log/yourapp/test
package main
import (
"log"
"os"
)
func main() {
log.SetOutput(os.Stderr)
log.Println("test log")
}
运行:
go run main.go
journalctl -f
你可以贴出:
log.SetOutputcat /etc/os-release)我可以直接告诉你“为什么没日志”。