在 Debian 上“Go 程序没有日志输出”通常不是 Debian 本身的问题,而是程序、运行方式或环境配置导致的。下面按最常见原因逐一说明,并给出排查方法。
Go 默认 log 包输出到 stderr。
如果你用 systemd 运行服务
日志不在终端,而在:
journalctl -u your-service.service
如果你用 nohup / &
nohup ./app > app.log 2>&1 &
✅ 检查:
journalctl -xe
很多 Debian 程序通过:
运行后 没有终端,自然看不到 fmt.Println。
✅ 正确做法:
log.SetOutput(os.Stdout)
并确保服务配置中允许日志输出。
如果你用了日志库(如 zap、logrus、zerolog):
log.SetLevel(log.WarnLevel)
那么 Info、Debug 都不会输出。
✅ 检查:
log.SetLevel(log.DebugLevel)
常见于:
os.Exit() 提前退出init() 中 panic✅ 排查:
go run main.go
在本地看是否有输出。
某些 Debian 镜像:
/var/logreadonly 根文件系统(容器)✅ 测试:
log.Println("test")
如果完全无输出,可能是 stdout 被丢弃。
例如:
log.SetOutput(os.OpenFile("/var/log/app.log", ...))
但:
✅ 检查:
ls -l /var/log/app.log
# 1. 是否真的运行了
ps aux | grep your-app
# 2. systemd 日志
journalctl -u your-app
# 3. 最简单测试程序
package main
import "log"
func main() {
log.Println("hello debian")
}
log.SetOutput(os.Stdout)
log.SetFlags(log.LstdFlags | log.Lshortfile)
配合 systemd:
[Service]
StandardOutput=journal
StandardError=journal
你可以贴出:
我可以精确告诉你为什么没日志。