温馨提示×

golang日志centos怎么配

小樊
43
2026-10-06 01:35:29
栏目: 编程语言

在 CentOS 上配置 Golang 日志,通常分三种常见场景,我按“从简单到生产”给你讲:


一、最简单:Go 自带 log 包(不依赖系统)

适合开发、调试。

package main

import (
    "log"
    "os"
)

func main() {
    logFile, _ := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    log.SetOutput(logFile)
    log.SetFlags(log.LstdFlags | log.Lshortfile)

    log.Println("hello centos log")
}

✅ 优点:零依赖
❌ 缺点:无轮转、无级别


二、生产推荐:Go 日志 + logrotate(CentOS 标准方案)

1️⃣ Go 代码(写文件)

log.SetOutput(os.Stdout)

或写文件:

log.SetOutput(logFile)

2️⃣ 配置 logrotate(CentOS 自带)

创建配置文件:

sudo vi /etc/logrotate.d/myapp

内容示例:

/var/log/myapp.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    copytruncate
}

✅ 常用参数说明:

  • daily:每天轮转
  • rotate 7:保留 7 份
  • compress:压缩旧日志
  • copytruncate:不重启程序截断日志(Go 常用)

测试:

sudo logrotate -d /etc/logrotate.d/myapp

三、系统级:Go 程序 + systemd + journalctl(CentOS 7/8)

1️⃣ Go 程序输出到 stdout

log.SetOutput(os.Stdout)

2️⃣ 写 systemd 服务

sudo vi /etc/systemd/system/myapp.service
[Unit]
Description=My Go App
After=network.target

[Service]
ExecStart=/opt/myapp/myapp
WorkingDirectory=/opt/myapp
User=appuser
Restart=always
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

3️⃣ 启动并查看日志

sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp

查看日志:

journalctl -u myapp -f

✅ 优点:

  • 无需自己管理日志文件
  • 支持级别、时间、过滤

四、Go 日志库推荐(生产更好用)

✅ zap(Uber,高性能)

logger, _ := zap.NewProduction()
logger.Info("hello")

✅ logrus

log.SetFormatter(&log.JSONFormatter{})
log.WithField("module", "auth").Info("login")

五、总结选择建议

场景 推荐方案
本地测试 Go log
服务器程序 Go log + logrotate
系统服务 systemd + journalctl
高并发服务 zap + systemd

如果你愿意,可以告诉我:

  • CentOS 版本(7 / 8 / Stream)
  • Go 程序是不是 systemd 服务
  • 是否需要按级别(error/warn/info)

我可以直接帮你写 完整配置 + 示例。

0 踩