在 Debian 上运行 Go 程序时“日志为空”,通常不是 Go 语言本身的问题,而是运行环境、日志输出目标或进程管理方式导致的。下面按常见原因逐一说明,并给出排查办法。
很多 Go 程序:
log.SetOutput(file)
或:
log.Println -> 文件
fmt.Println -> 终端
现象:你在终端看不到任何日志。
✅ 排查:
log.SetOutputlsof -p <pid> 看进程打开了哪些文件在 Debian(尤其是 10+)中,服务通常由 systemd 管理:
sudo systemctl status your-service
journalctl -u your-service
如果程序只写 stdout/stderr,日志会在 journal,而不是你手动运行的终端。
✅ 正确做法:
journalctl -u your-service -f
❌ 错误假设:
“我 ssh 登录后啥也没看到,说明没日志”
nohup ./app &
默认会写到:
nohup.out
如果这个文件:
/dev/null就会“完全没日志”
✅ 检查:
ls -l nohup.out
cat nohup.out
✅ 建议:
./app > /var/log/app.log 2>&1 &
例如:
logger := zap.NewNop()
或:
logrus.SetLevel(logrus.WarnLevel)
✅ 排查:
Debug/Warn/Errorlog.Println("start")
os.Exit(1)
或配置加载失败直接退出。
✅ 排查:
echo $?
./app; echo $?
/var/log✅ 测试:
touch /var/log/test && echo ok
package main
import (
"log"
"os"
)
func main() {
log.SetOutput(os.Stdout)
log.Println("hello from go")
}
运行:
go run main.go
如果这里都没输出,那就是环境问题。
如果你愿意,可以把:
发出来,我可以直接帮你指出“为什么是空的”。