在 CentOS 上运行 Go 程序时“日志为空”,常见原因和排查思路如下(按出现频率排序):
Go 程序默认:
fmt.Println → stdoutlog.Println → stderr常见场景
nohup ./app & 但没重定向systemd 但没看 journalctl解决
# nohup 方式
nohup ./app > app.log 2>&1 &
# systemd
journalctl -u your-service -f
如果你用 systemd 启动:
[Service]
ExecStart=/opt/app/app
# 没写 StandardOutput / StandardError
默认日志会进 journal,但:
journalctl建议配置
StandardOutput=journal
StandardError=journal
然后:
journalctl -u your-service
如果你用了 log、zap、logrus 等:
log.SetOutput(nil) // 日志直接没了
或:
logger, _ := zap.NewProduction()
// 但没调用 logger.Info(...)
检查
logger.Info/Warn/Errorlog.SetOutput(file)Sync()zap 示例
defer logger.Sync()
logrus
log.SetOutput(os.Stdout)
CentOS 默认开启 SELinux:
getenforce
如果为 Enforcing,可能:
/var/log/app验证
ausearch -m avc -ts recent
临时验证
setenforce 0
log.SetOutput(os.Create("app.log"))
如果你用 systemd:
WorkingDirectory=/opt/app
否则日志可能在 / 或未知目录。
os.Exit() 提前退出panic 在日志前init() 中出错排查
strace -f -e trace=write ./app
journalctl 有没有内容?getenforce 是什么?如果你愿意,可以贴:
我可以直接帮你定位到具体原因。