82 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			82 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package jobs
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								import (
							 | 
						|||
| 
								 | 
							
									"fmt"
							 | 
						|||
| 
								 | 
							
									"os"
							 | 
						|||
| 
								 | 
							
									"path/filepath"
							 | 
						|||
| 
								 | 
							
									"time"
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									"github.com/go-admin-team/go-admin-core/logger"
							 | 
						|||
| 
								 | 
							
									"github.com/go-admin-team/go-admin-core/sdk"
							 | 
						|||
| 
								 | 
							
									"github.com/go-admin-team/go-admin-core/sdk/config"
							 | 
						|||
| 
								 | 
							
									"gorm.io/gorm"
							 | 
						|||
| 
								 | 
							
								)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								type ClearLogJob struct {
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								// 删除过期日志
							 | 
						|||
| 
								 | 
							
								func (t ClearLogJob) Exec(arg interface{}) error {
							 | 
						|||
| 
								 | 
							
									str := time.Now().Format(timeFormat) + " [INFO] JobCore ClearLogJob exec success"
							 | 
						|||
| 
								 | 
							
									defer logger.Info(str)
							 | 
						|||
| 
								 | 
							
									var db *gorm.DB
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									for _, item := range sdk.Runtime.GetDb() {
							 | 
						|||
| 
								 | 
							
										db = item
							 | 
						|||
| 
								 | 
							
										break
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									ClearLogs(db)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									return nil
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								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 := 2
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									// 遍历指定文件夹中的所有文件
							 | 
						|||
| 
								 | 
							
									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)
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								}
							 |