在CentOS下,Golang日志归档可以通过以下几种方法实现:
CentOS系统自带logrotate工具,可以用来管理日志文件的归档和压缩。首先,确保logrotate已安装:
sudo yum install logrotate
然后,创建一个logrotate配置文件,例如/etc/logrotate.d/golang-app,并添加以下内容:
/path/to/your/golang/app/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 0640 root root
}
这里的配置表示每天归档日志文件,保留最近7天的归档文件,压缩归档文件,如果日志文件不存在则不报错,如果日志文件为空则不归档,创建新的归档文件时设置权限为0640。
最后,确保logrotate配置文件的定时任务已启用:
sudo systemctl enable logrotate
在Golang应用程序中,可以使用第三方日志库(如logrus、zap等)来实现日志归档功能。这些库通常提供了日志级别、日志格式、日志输出和归档等功能。
例如,使用logrus库,可以在Golang应用程序中实现日志归档:
package main
import (
    "github.com/sirupsen/logrus"
    "os"
    "time"
)
func main() {
    log := logrus.New()
    // 设置日志输出到文件
    file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    if err == nil {
        log.Out = file
    } else {
        log.Info("Failed to log to file, using default stderr")
    }
    // 设置日志格式
    log.SetFormatter(&logrus.TextFormatter{
        FullTimestamp: true,
    })
    // 每天创建一个新的日志文件
    go func() {
        for {
            time.Sleep(24 * time.Hour)
            file.Close()
            os.Rename("app.log", "app-"+time.Now().Format("2006-01-02")+".log")
            file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
            if err == nil {
                log.Out = file
            }
        }
    }()
    // 示例日志输出
    log.Info("Hello, World!")
}
这个示例中,Golang应用程序会将日志输出到app.log文件,并每天创建一个新的日志文件,文件名为app-YYYY-MM-DD.log。
以上两种方法可以根据实际需求选择使用。使用系统自带的logrotate工具更简单,适用于大多数场景;而在Golang应用程序中使用第三方日志库可以提供更多的定制化功能。