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