在 CentOS 上运行 Golang 程序时,“日志权限怎么设”通常分为 三层问题:
1️⃣ 日志文件本身的 Linux 权限
2️⃣ 运行 Go 程序的用户权限
3️⃣ Go 代码里如何创建/写入日志(避免权限错误)
下面按最常见场景说明。
日志文件权限 = 运行 Go 程序的用户对该文件/目录有权限
如果 Go 程序是:
root 启动 → 权限一般不是问题appuser)启动 → 必须保证该用户对日志目录可写/var/log/myapp/
└── app.log
不要写到:
/root//tmp(生产环境不推荐)sudo mkdir -p /var/log/myapp
sudo chown -R appuser:appuser /var/log/myapp
sudo chmod 750 /var/log/myapp
如果日志文件已存在:
sudo touch /var/log/myapp/app.log
sudo chown appuser:appuser /var/log/myapp/app.log
sudo chmod 640 /var/log/myapp/app.log
✅ 含义:
750 目录:属主可读写执行,组用户可读,其他无权限640 文件:属主读写,组只读logFile, err := os.OpenFile(
"/var/log/myapp/app.log",
os.O_CREATE|os.O_WRONLY|os.O_APPEND,
0644,
)
if err != nil {
log.Fatal(err)
}
defer logFile.Close()
logger := log.New(logFile, "", log.LstdFlags)
logger.Println("server started")
✅ 注意:
0644 是文件创建权限umask 影响import "github.com/sirupsen/logrus"
logFile, _ := os.OpenFile(
"/var/log/myapp/app.log",
os.O_CREATE|os.O_WRONLY|os.O_APPEND,
0644,
)
logrus.SetOutput(logFile)
如果你用 systemd 启动 Go 程序:
[Unit]
Description=My Go App
[Service]
User=appuser
Group=appuser
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/myapp
Restart=always
[Install]
WantedBy=multi-user.target
⚠️ 关键:
User=appuser 决定了日志权限如果你不自己写日志文件:
log.Println("hello")
然后通过 systemd 启动,日志会进:
journalctl -u myapp
✅ 优点:
permission denied原因:
✅ 解决:
chown -R appuser:appuser /var/log/myapp
chmod 750 /var/log/myapp
✅ 固定运行用户,不要混用 root / 普通用户
CentOS 上 Golang 日志权限 = 日志目录属主 = 启动 Go 的用户,目录 750,文件 640 最安全。
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置。