package logger import ( "IotAdmin/core/logger" "fmt" "os" "path/filepath" "strings" "time" ) // 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 { err2 := deleteFile(file, threshold) if err2 != nil { return err2 } } return nil } // DeleteAllLogsOlderThan 删除比指定日期早的日志文件(包括子目录下)。 // days 参数表示需要删除的日志文件是几天前的。 func DeleteAllLogsOlderThan(path, suffix string, days int) error { threshold := time.Now().AddDate(0, 0, 0) files, err := recursivelyFindFiles(path, suffix) if err != nil { return fmt.Errorf("failed to list files in %s: %w", path, err) } for _, file := range files { err2 := deleteFile(file, threshold) if err2 != nil { return err2 } } return nil } func deleteFile(file string, threshold time.Time) error { fileInfo, err := os.Stat(file) if err != nil { if os.IsNotExist(err) { logger.Errorf("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) } logger.Infof("删除日志文件: %s\n", file) } return nil } // recursivelyFindFiles walks the given directory tree and returns a slice of paths for files with the specified suffix. func recursivelyFindFiles(dirPath string, suffix string) ([]string, error) { var files []string err := filepath.Walk(dirPath, func(path string, info os.FileInfo, err error) error { if err != nil { return err } if !info.IsDir() && strings.HasSuffix(info.Name(), suffix) { files = append(files, path) } return nil }) if err != nil { return nil, err } return files, nil }