clean.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package iotLog
  2. import (
  3. "fmt"
  4. "os"
  5. "path/filepath"
  6. "time"
  7. )
  8. // Clean 清理日志文件
  9. func Clean(dataDays, deviceDays int) (err error) {
  10. err = cleanDataLog(dataDays)
  11. if err != nil {
  12. return err
  13. }
  14. err = cleanDeviceLog(deviceDays)
  15. if err != nil {
  16. return err
  17. }
  18. return
  19. }
  20. func cleanDataLog(days int) error {
  21. path := getDataLogPath()
  22. //删除30天前的日志文件
  23. return deleteLogsOlderThan(path, "data", days)
  24. }
  25. func cleanDeviceLog(days int) error {
  26. path := getDeviceLogPath()
  27. //删除30天前的日志文件
  28. return deleteLogsOlderThan(path, "log", days)
  29. }
  30. // deleteLogsOlderThan 删除比指定日期早的日志文件。
  31. // days 参数表示需要删除的日志文件是几天前的。
  32. func deleteLogsOlderThan(path, suffix string, days int) error {
  33. threshold := time.Now().AddDate(0, 0, -days)
  34. files, err := filepath.Glob(filepath.Join(path, "*."+suffix)) // 假设日志文件以.log结尾
  35. if err != nil {
  36. return fmt.Errorf("failed to list files in %s: %w", path, err)
  37. }
  38. for _, file := range files {
  39. fileInfo, err := os.Stat(file)
  40. if err != nil {
  41. if os.IsNotExist(err) {
  42. fmt.Printf("File %s does not exist\n", file)
  43. } else {
  44. return fmt.Errorf("failed to get info for %s: %w", file, err)
  45. }
  46. }
  47. // 检查文件修改时间是否早于阈值
  48. if fileInfo.ModTime().Before(threshold) {
  49. err = os.Remove(file)
  50. if err != nil {
  51. return fmt.Errorf("failed to delete %s: %w", file, err)
  52. }
  53. fmt.Printf("Deleted log file: %s\n", file)
  54. }
  55. }
  56. return nil
  57. }