优化一些问题&修复一些BUG
This commit is contained in:
@@ -10,35 +10,48 @@ import (
|
||||
// 监听dir文件夹的所有文件,循环查找是否有超过days天的文件,删除掉
|
||||
|
||||
func (l *Logger) delete() {
|
||||
|
||||
tick := time.NewTicker(time.Hour)
|
||||
defer tick.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-tick.C:
|
||||
err := l.walkAndDel()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
// 后台清理不能把整个进程带崩
|
||||
func() {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
fmt.Println("清理日志文件异常:", r)
|
||||
}
|
||||
}()
|
||||
if err := l.walkAndDel(); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}()
|
||||
case <-l.ctx.Done():
|
||||
return
|
||||
case <-l.done:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Logger) walkAndDel() error {
|
||||
// 没设置删除天数(<=0 表示不删除)
|
||||
if l.option.days <= 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
deadline := time.Now().AddDate(0, 0, -l.option.days)
|
||||
|
||||
err := filepath.Walk(l.option.dir, func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
// 单个文件出错不应该中断整个遍历
|
||||
fmt.Println(err)
|
||||
return err
|
||||
}
|
||||
// 没设置删除天数
|
||||
if l.option.days <= 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 判断最后修改时间是否大于3天
|
||||
if info.ModTime().After(time.Now().AddDate(0, 0, -l.option.days)) {
|
||||
// 最后修改时间在保留期内,跳过
|
||||
if info.ModTime().After(deadline) {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -46,14 +59,18 @@ func (l *Logger) walkAndDel() error {
|
||||
if !isEmptyDir(path) {
|
||||
return nil
|
||||
}
|
||||
} else if filepath.Ext(path) != ".log" {
|
||||
return nil
|
||||
}
|
||||
ext := filepath.Ext(path)
|
||||
if ext != ".log" {
|
||||
|
||||
// 删除文件 / 空目录
|
||||
if rerr := os.Remove(path); rerr != nil {
|
||||
// 正被写入的文件在 Windows 上删不掉,等下一轮再试,不要终止遍历
|
||||
fmt.Println("删除文件失败", path, rerr)
|
||||
return nil
|
||||
}
|
||||
// 删除文件
|
||||
fmt.Println("删除文件", path)
|
||||
return os.Remove(path)
|
||||
return nil
|
||||
})
|
||||
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user