debian

Debian Golang日志如何设置自动清理策略

小樊
38
2025-11-14 18:03:04
栏目: 编程语言

在Debian系统中,使用Golang编写的应用程序可以通过配置日志库来实现自动清理策略。以下是一个使用logrus库的示例,展示了如何设置日志文件的自动清理策略:

  1. 首先,确保已经安装了logrus库。如果没有安装,可以通过以下命令安装:
go get github.com/sirupsen/logrus
  1. 创建一个名为main.go的文件,并添加以下代码:
package main

import (
	"os"
	"time"

	"github.com/sirupsen/logrus"
)

func main() {
	// 创建日志文件
	logFile, err := os.OpenFile("logs/app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		logrus.Fatal(err)
	}
	defer logFile.Close()

	// 设置日志输出到文件
	logrus.SetOutput(logFile)

	// 设置日志级别
	logrus.SetLevel(logrus.InfoLevel)

	// 设置日志格式为文本格式
	logrus.SetFormatter(&logrus.TextFormatter{
		FullTimestamp: true,
	})

	// 设置日志文件的最大大小(例如:10MB)
	logrus.SetReportCaller(true)
	logrus.SetFormatter(&logrus.JSONFormatter{})
	logrus.WithFields(logrus.Fields{
		"app_name": "my_app",
	}).Info("Application started")

	// 设置日志文件的最大备份数量
	maxBackupIndex := 3

	// 设置日志文件的自动清理策略
	ticker := time.NewTicker(24 * time.Hour)
	go func() {
		for range ticker.C {
			logrus.Info("Cleaning up old log files...")
			cleanOldLogFiles(maxBackupIndex)
		}
	}()

	// 模拟应用程序运行
	select {}
}

func cleanOldLogFiles(maxBackupIndex int) {
	// 获取日志文件列表
	files, err := os.ReadDir("logs")
	if err != nil {
		logrus.Error(err)
		return
	}

	// 对日志文件按修改时间排序
	logFiles := make([]os.FileInfo, len(files))
	copy(logFiles, files)
	sort.Slice(logFiles, func(i, j int) bool {
		return logFiles[i].ModTime().Before(logFiles[j].ModTime())
	})

	// 删除超过最大备份数量的旧日志文件
	for _, file := range logFiles[maxBackupIndex:] {
		err := os.Remove("logs/" + file.Name())
		if err != nil {
			logrus.Error(err)
		}
	}
}

在这个示例中,我们创建了一个名为logs/app.log的日志文件,并设置了日志级别、格式和输出。我们还设置了一个定时器,每隔24小时运行一次cleanOldLogFiles函数,该函数会删除超过最大备份数量的旧日志文件。

你可以根据需要调整maxBackupIndex变量的值来设置保留的日志文件数量。同时,你可以修改定时器的间隔时间来调整自动清理策略的执行频率。

0
看了该问题的人还看了