温馨提示×

golang日志为何不写centos

小樊
51
2026-09-21 09:44:45
栏目: 编程语言

这个问题通常不是“Golang 本身不写日志到 CentOS”,而是程序运行的日志没有按你预期的地方输出。常见原因和排查思路如下:


1. 你用的是 log 包,但没指定输出文件

Go 标准库 log 默认输出到 标准错误(stderr),不是文件。

log.Println("hello")

在 CentOS 上:

  • 直接运行:日志打印到终端
  • 用 nohup / systemd:日志可能进 stdout/stderr,你看不到

✅ 正确做法:自己写文件

f, _ := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
log.SetOutput(f)

2. systemd 服务没有配置日志重定向

如果你用 systemd 启动:

[Service]
ExecStart=/opt/myapp

日志不会自动写文件,而是进 journald。

查看方式:

journalctl -u myapp.service

✅ 如果想写文件:

StandardOutput=append:/var/log/myapp.log
StandardError=append:/var/log/myapp.log

3. 权限问题(CentOS 常见)

CentOS 默认:

  • /var/log 需要 root 权限
  • SELinux 可能阻止写入

检查:

ls -l /var/log/myapp.log
getenforce

✅ 解决:

  • 用 www / app 用户时,放到:
    /home/app/logs/
    
  • 或关闭 SELinux(不推荐生产)

4. 程序 panic / 没执行到日志代码

CentOS 上常见:

  • 配置文件路径不对
  • 环境变量缺失
  • 启动即退出

检查:

systemctl status myapp
journalctl -xe

5. 用了第三方日志库但没初始化

如 logrus / zap:

logrus.SetOutput(file)

否则还是 stdout。


快速自查清单 ✅

  • [ ] 日志是写到文件还是 stdout?
  • [ ] 是否在 CentOS 上有写权限?
  • [ ] 是否用 systemd / nohup?
  • [ ] 是否看了 journalctl?

如果你愿意,可以贴:

  • 启动方式(systemd / shell)
  • 日志代码片段
  • CentOS 版本

我可以直接帮你定位是哪一条。

0 踩