温馨提示×

centos golang日志怎么分割

小樊
41
2026-10-11 23:04:12
栏目: 编程语言

在 CentOS 上,Golang 程序日志分割常见有 三种方式:


一、使用日志库自带分割(推荐,最简单)

1. lumberjack(最常用)

Golang 官方推荐方案之一,配合 logrus / zap / slog 使用。

安装

go get gopkg.in/natefinch/lumberjack.v2

示例(搭配标准 log)

import (
    "log"
    "gopkg.in/natefinch/lumberjack.v2"
)

func main() {
    log.SetOutput(&lumberjack.Logger{
        Filename:   "/var/log/myapp/app.log",
        MaxSize:    100,   // MB
        MaxBackups: 7,     // 保留旧文件数
        MaxAge:     30,    // 天数
        Compress:   true,  // 压缩
    })

    log.Println("hello")
}

✅ 优点:

  • 不依赖系统
  • 跨平台
  • 精细化控制

二、使用 Linux logrotate(CentOS 原生)

适合 已有日志文件 的场景。

1. 写日志到文件

log.SetOutput(os.OpenFile("/var/log/myapp/app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644))

2. 配置 logrotate

sudo vim /etc/logrotate.d/myapp

内容示例:

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

copytruncate 很关键:不重启程序直接截断日志

3. 测试

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

三、使用 systemd journal + 分割(CentOS 7+)

如果你用 systemd 启动 Go 程序:

[Unit]
Description=My Go App

[Service]
ExecStart=/opt/myapp/app
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

日志查看:

journalctl -u myapp -f

systemd 自动管理日志大小。


推荐总结

场景 推荐方案
新项目 lumberjack
已有程序 logrotate
运维统一 systemd journal

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

  • 用的日志库(logrus / zap / slog / 原生)
  • CentOS 版本
  • 是否用 systemd

我可以给你一套 完整可直接用的配置。

0 踩