在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天),则删除这些文件。
请注意,这个示例仅用于演示目的,实际应用中可能需要根据具体需求进行调整。例如,你可能需要考虑日志文件的滚动策略、日志级别等因素。