linux

Golang日志文件如何定期清理

小樊
40
2025-05-02 14:14:07
栏目: 编程语言

在Golang中,你可以使用time包和os包来实现日志文件的定期清理。以下是一个简单的示例,展示了如何定期清理超过指定天数的日志文件:

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"os"
	"path/filepath"
	"time"
)

const (
	logDir      = "logs" // 日志文件所在的目录
	maxDays     = 7    // 保留日志文件的最大天数
	cleanupInterval = 24 * time.Hour // 清理间隔时间
)

func main() {
	// 创建日志目录(如果不存在)
	if _, err := os.Stat(logDir); os.IsNotExist(err) {
		os.Mkdir(logDir, os.ModePerm)
	}

	// 启动定期清理任务
	ticker := time.NewTicker(cleanupInterval)
	go func() {
		for range ticker.C {
			cleanUpOldLogs()
		}
	}()

	// 示例:每隔1秒创建一个新的日志文件
	for i := 0; i < 10; i++ {
		logFile := filepath.Join(logDir, fmt.Sprintf("log_%d.txt", time.Now().Unix()))
		file, err := os.Create(logFile)
		if err != nil {
			log.Fatalf("Failed to create log file: %v", err)
		}
		file.WriteString(fmt.Sprintf("This is a log entry %d\n", i))
		file.Close()

		time.Sleep(1 * time.Second)
	}
}

在这个示例中,我们首先创建了一个名为logs的目录来存储日志文件。然后,我们使用time.NewTicker创建了一个定时器,每隔24小时触发一次清理任务。cleanUpOldLogs函数会遍历日志目录中的所有文件,检查它们的最后修改时间,如果超过了最大保留天数(例如7天),则删除这些文件。

请注意,这个示例仅用于演示目的,实际应用中可能需要根据具体需求进行调整。例如,你可能需要考虑日志文件的滚动策略、日志级别等因素。

0
看了该问题的人还看了