package iotLog import ( "fmt" "os" "path/filepath" "time" ) // Clean 清理日志文件 func Clean(dataDays, deviceDays int) (err error) { err = cleanDataLog(dataDays) if err != nil { return err } err = cleanDeviceLog(deviceDays) if err != nil { return err } return } func cleanDataLog(days int) error { path := getDataLogPath() //删除30天前的日志文件 return deleteLogsOlderThan(path, "data", days) } func cleanDeviceLog(days int) error { path := getDeviceLogPath() //删除30天前的日志文件 return deleteLogsOlderThan(path, "log", days) } // deleteLogsOlderThan 删除比指定日期早的日志文件。 // days 参数表示需要删除的日志文件是几天前的。 func deleteLogsOlderThan(path, suffix string, days int) error { threshold := time.Now().AddDate(0, 0, -days) files, err := filepath.Glob(filepath.Join(path, "*."+suffix)) // 假设日志文件以.log结尾 if err != nil { return fmt.Errorf("failed to list files in %s: %w", path, err) } for _, file := range files { fileInfo, err := os.Stat(file) if err != nil { if os.IsNotExist(err) { fmt.Printf("File %s does not exist\n", file) } else { return fmt.Errorf("failed to get info for %s: %w", file, err) } } // 检查文件修改时间是否早于阈值 if fileInfo.ModTime().Before(threshold) { err = os.Remove(file) if err != nil { return fmt.Errorf("failed to delete %s: %w", file, err) } fmt.Printf("Deleted log file: %s\n", file) } } return nil }