centos

Golang日志清理策略在CentOS怎么设置

小樊
50
2025-08-14 19:35:50
栏目: 编程语言

在CentOS上设置Golang应用程序的日志清理策略,可以通过以下几种方法实现:

方法一:使用系统定时任务(cron)

  1. 编写日志清理脚本: 创建一个Shell脚本来清理日志文件。例如,创建一个名为clean_logs.sh的脚本:

    #!/bin/bash
    
    LOG_DIR="/path/to/your/logs"
    MAX_LOG_SIZE=100M
    MAX_LOG_FILES=10
    
    # 清理超过最大大小的日志文件
    find "$LOG_DIR" -type f -name "*.log" -size +$MAX_LOG_SIZE -exec rm -f {} \;
    
    # 清理超过最大数量的日志文件
    cd "$LOG_DIR"
    ls -1t *.log | tail -n +$MAX_LOG_FILES | xargs rm -f
    

    确保脚本有执行权限:

    chmod +x /path/to/clean_logs.sh
    
  2. 设置定时任务: 使用crontab来定期执行日志清理脚本。编辑当前用户的crontab文件:

    crontab -e
    

    添加一行来设置定时任务,例如每天凌晨2点执行日志清理:

    0 2 * * * /path/to/clean_logs.sh
    

方法二:使用Golang日志库的内置功能

如果你使用的是Golang的日志库(如logruszap),可以利用它们的内置功能来设置日志轮转。

使用logruslumberjack

logrus可以与lumberjack库结合使用来实现日志轮转。

  1. 安装lumberjack

    go get github.com/natefinch/lumberjack
    
  2. 配置logrus使用lumberjack

    package main
    
    import (
        "github.com/sirupsen/logrus"
        "gopkg.in/natefinch/lumberjack.v2"
    )
    
    func main() {
        log := logrus.New()
        log.SetOutput(&lumberjack.Logger{
            Filename:   "/path/to/your/logs/app.log",
            MaxSize:    100, // megabytes
            MaxBackups: 3,
            MaxAge:     28, //days
            Compress:   true, // disabled by default
        })
    
        log.Info("This is an info message")
    }
    

使用zaplumberjack

zap也可以与lumberjack结合使用。

  1. 安装lumberjack

    go get github.com/natefinch/lumberjack
    
  2. 配置zap使用lumberjack

    package main
    
    import (
        "go.uber.org/zap"
        "go.uber.org/zap/zapcore"
        "gopkg.in/natefinch/lumberjack.v2"
    )
    
    func main() {
        logger, _ := zap.NewProduction(zapcore.AddSync(&lumberjack.Logger{
            Filename:   "/path/to/your/logs/app.log",
            MaxSize:    100, // megabytes
            MaxBackups: 3,
            MaxAge:     28, //days
            Compress:   true, // disabled by default
        }))
        defer logger.Sync()
    
        logger.Info("This is an info message")
    }
    

方法三:使用系统日志服务

如果你希望将Golang应用程序的日志发送到系统日志服务(如rsyslogsyslog-ng),可以利用这些服务的配置来实现日志轮转和清理。

  1. 配置rsyslog

    编辑/etc/rsyslog.conf或创建一个新的配置文件(如/etc/rsyslog.d/50-default.conf),添加以下内容:

    if $programname == 'your_app_name' then /var/log/your_app_name.log
    & stop
    

    然后重启rsyslog服务:

    systemctl restart rsyslog
    
  2. 配置日志轮转

    编辑/etc/logrotate.d/your_app_name文件,添加以下内容:

    /var/log/your_app_name.log {
        daily
        missingok
        rotate 7
        compress
        notifempty
        create 640 root adm
    }
    

通过以上方法,你可以在CentOS上设置Golang应用程序的日志清理策略。选择适合你需求的方法进行配置即可。

0
看了该问题的人还看了