在 CentOS 上遇到 Go 程序日志为空,通常不是 Go 本身的问题,而是运行环境或配置导致的。下面按最常见原因逐条排查:
最常见原因。
检查点:
os.Exit() 提前退出main() 之前 panic快速验证:
func main() {
log.Println("start")
// ...
}
如果连 start 都没有,说明程序没运行或被中断。
CentOS 上常见场景:
日志在 journal,不在文件
journalctl -u your-service -f
nohup ./app > out.log 2>&1 &
但你可能看了别的日志文件
✅ 确认:
ls -l
cat nohup.out
Go 不会自动创建目录
log.SetOutput(os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644))
如果 /var/log/myapp 不存在:
✅ 检查:
ls -ld /var/log
touch /var/log/test.log
CentOS 经典坑
即使权限对,SELinux 也可能拦
查看:
getenforce
如果是 Enforcing,试试:
setenforce 0
或给日志目录加权限:
semanage fcontext -a -t var_log_t "/data/logs(/.*)?"
restorecon -Rv /data/logs
如果你用的是:
bufio.Writer程序退出太快,缓冲没写盘
✅ 解决:
defer logFile.Close()
或显式 flush
例如 zap:
logger, _ := zap.NewProduction()
defer logger.Sync()
如果不 Sync(),可能丢日志
确认进程是否存在:
ps aux | grep yourapp
或:
systemctl status yourapp
日志在容器里:
docker logs container_id
如果你愿意,可以贴:
我可以直接帮你定位到具体原因。