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