From 60ad89f164246e35df9d0de990993d599a5dc7c3 Mon Sep 17 00:00:00 2001 From: Yun Date: Tue, 23 Jan 2024 13:37:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=BF=87=E6=9C=9F=E7=A7=BB?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- delete.go | 5 ----- filePath.go | 2 +- loggerx.go | 4 ++++ loggerx_test.go | 2 ++ options.go | 11 ++++++++++- remove.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 68 insertions(+), 7 deletions(-) delete mode 100644 delete.go create mode 100644 remove.go diff --git a/delete.go b/delete.go deleted file mode 100644 index cb2625c..0000000 --- a/delete.go +++ /dev/null @@ -1,5 +0,0 @@ -package loggerx - - - - diff --git a/filePath.go b/filePath.go index a1ead24..7bdcf4b 100644 --- a/filePath.go +++ b/filePath.go @@ -7,7 +7,7 @@ import ( "time" ) -// 日志文件的计算 +// 文件操作 // 获取最新的文件名 func (l *Logger) nowFileName(event string) string { diff --git a/loggerx.go b/loggerx.go index b5a0a5b..8eddcbd 100644 --- a/loggerx.go +++ b/loggerx.go @@ -52,6 +52,10 @@ func NewLogger(opts ...Option) *Logger { gin.DefaultWriter = io.MultiWriter(l, os.Stdout) gin.DefaultErrorWriter = io.MultiWriter(l, os.Stdout) } + + // 日志删除 + go l.delete() + return l } diff --git a/loggerx_test.go b/loggerx_test.go index 85f22b8..b6455b9 100644 --- a/loggerx_test.go +++ b/loggerx_test.go @@ -3,6 +3,7 @@ package loggerx_test import ( "context" "testing" + "time" "code.yun.ink/pkg/loggerx" ) @@ -20,4 +21,5 @@ func TestLogger(t *testing.T) { l.Info(context.Background(), "test info") + time.Sleep(time.Second * 2) } diff --git a/options.go b/options.go index 596146d..eda8779 100644 --- a/options.go +++ b/options.go @@ -7,7 +7,8 @@ type loggerOption struct { isGinLog bool isGid bool traceField string // trace字段 - errorToInfo bool // + errorToInfo bool // 错误日志是否写入info日志 + days int // 日志保存天数 } func defaultOptions() loggerOption { @@ -15,6 +16,7 @@ func defaultOptions() loggerOption { format: "json", dir: "./log", traceField: "trace_id", + days: 7, } } @@ -69,6 +71,13 @@ func SetGID() Option { } } +// 日志保存天数 +func SetDays(days int) Option { + return func(o *loggerOption) { + o.days = days + } +} + // 文件切割规则 // 1.文件大小 // 2.时间A(年/月/日/时) diff --git a/remove.go b/remove.go new file mode 100644 index 0000000..e127396 --- /dev/null +++ b/remove.go @@ -0,0 +1,51 @@ +package loggerx + +import ( + "fmt" + "os" + "path/filepath" + "time" +) + +func (l *Logger) delete() { + 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 { + l.option.days = 1 + } + + // 判断最后修改时间是否大于3天 + if info.ModTime().After(time.Now().AddDate(0, 0, -l.option.days)) { + return nil + } + + if info.IsDir() { + if !isEmptyDir(path) { + return nil + } + } + ext := filepath.Ext(path) + if ext == ".log" { + return nil + } + // 删除文件 + fmt.Println("删除文件", path) + return os.Remove(path) + }) + + if err != nil { + fmt.Println(err) + } +} + +func isEmptyDir(path string) bool { + files, err := os.ReadDir(path) + if err != nil { + fmt.Println(err) + return false + } + return len(files) == 0 // 文件夹为空 +}