CentOS上Golang日志轮转策略有哪些

在CentOS上实现Golang日志轮转主要有以下两种策略:

一、使用系统工具logrotate(推荐)

  • 原理:通过系统级日志管理工具logrotate定时轮转日志文件,支持按时间、文件大小等策略轮转,并可配置压缩、保留天数等参数。
  • 配置步骤
    1. 安装logrotate:sudo yum install logrotate
    2. 创建配置文件:在/etc/logrotate.d/目录下新建文件(如golang),内容示例:
      /path/to/golang/logs/*.log {
          daily       # 每日轮转
          rotate 7    # 保留7天日志
          compress    # 压缩旧日志
          missingok   # 忽略不存在的日志文件
          notifempty  # 非空文件才轮转
          create 0640 root adm  # 新日志文件权限
      }
      ```。
      
    3. 测试配置:sudo logrotate -d /etc/logrotate.d/golang
    4. 设置定时任务(默认已集成到系统cron)。

二、使用Golang第三方库lumberjack

  • 原理:在Golang程序中通过lumberjack库实现日志轮转,支持按文件大小、数量、天数等参数自动轮转,无需依赖系统工具。
  • 配置步骤
    1. 安装库:go get github.com/natefinch/lumberjack
    2. 在代码中配置:
      import "gopkg.in/natefinch/lumberjack.v2"
      log.SetOutput(&lumberjack.Logger{
          Filename:   "/var/log/myapp.log",
          MaxSize:    10,    // 单个文件最大10MB
          MaxBackups: 3,     // 保留3个备份
          MaxAge:     28,    // 保留28天
          Compress:   true,  // 压缩旧日志
      })
      ```。
      
      

选择建议

  • 系统级管理:推荐使用logrotate,适合需要统一管理多个服务日志的场景,配置简单且支持定时任务。
  • 应用级控制:使用lumberjack更适合需要精细化控制单个应用日志的场景,如动态调整轮转参数。