| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- 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
- }
|