74 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package fileservice
 | 
						||
 | 
						||
import (
 | 
						||
	"fmt"
 | 
						||
	"go-admin/app/admin/models"
 | 
						||
	"os"
 | 
						||
	"path/filepath"
 | 
						||
	"strconv"
 | 
						||
	"time"
 | 
						||
 | 
						||
	"github.com/go-admin-team/go-admin-core/sdk/config"
 | 
						||
	"gorm.io/gorm"
 | 
						||
)
 | 
						||
 | 
						||
func ClearLogs(orm *gorm.DB) {
 | 
						||
	dir := config.LoggerConfig.Path
 | 
						||
 | 
						||
	if dir == "" {
 | 
						||
		dir = "temp/logs"
 | 
						||
	}
 | 
						||
 | 
						||
	// 检查文件夹是否存在
 | 
						||
	if _, err := os.Stat(dir); os.IsNotExist(err) {
 | 
						||
		fmt.Printf("Directory %s does not exist, skipping cleanup.\n", dir)
 | 
						||
		return
 | 
						||
	}
 | 
						||
 | 
						||
	// 获取当前时间
 | 
						||
	now := time.Now()
 | 
						||
	expirateDay := 7
 | 
						||
	var sysConfig models.SysConfig
 | 
						||
 | 
						||
	orm.Model(&sysConfig).Where("config_key = ?", "log_expirate_date").First(&sysConfig)
 | 
						||
 | 
						||
	if sysConfig.ConfigValue != "" {
 | 
						||
		day, _ := strconv.Atoi(sysConfig.ConfigValue)
 | 
						||
 | 
						||
		if day > 0 {
 | 
						||
			expirateDay = day
 | 
						||
		}
 | 
						||
	}
 | 
						||
 | 
						||
	// 遍历指定文件夹中的所有文件
 | 
						||
	err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
 | 
						||
		if err != nil {
 | 
						||
			return err
 | 
						||
		}
 | 
						||
 | 
						||
		// 只处理普通文件
 | 
						||
		if !info.IsDir() {
 | 
						||
			// 获取文件的修改时间
 | 
						||
			modTime := info.ModTime()
 | 
						||
 | 
						||
			// 计算文件修改时间与当前时间的差值
 | 
						||
			duration := now.Sub(modTime)
 | 
						||
 | 
						||
			// 如果文件超过7天,则删除
 | 
						||
			if duration > time.Duration(expirateDay)*24*time.Hour {
 | 
						||
				fmt.Printf("Deleting file: %s (Last modified: %s)\n", path, modTime)
 | 
						||
				err := os.Remove(path)
 | 
						||
				if err != nil {
 | 
						||
					return err
 | 
						||
				}
 | 
						||
			}
 | 
						||
		}
 | 
						||
 | 
						||
		return nil
 | 
						||
	})
 | 
						||
 | 
						||
	if err != nil {
 | 
						||
		fmt.Printf("Error walking the path %v: %v\n", dir, err)
 | 
						||
	}
 | 
						||
}
 |