Browse Source

feat(log): 优化日志文件名日期格式处理

-增加对文件名格式的判断和处理,支持多种日期格式- 使用正则表达式匹配和替换文件名中的日期部分
- 在文件名不含日期格式时,自动添加日期
fusu 2 months ago
parent
commit
34ad4e5b74
1 changed files with 23 additions and 3 deletions
  1. 23 3
      pkg/log/rotator.go

+ 23 - 3
pkg/log/rotator.go

@@ -1,8 +1,11 @@
 package log
 package log
 
 
 import (
 import (
+	"fmt"
 	"os"
 	"os"
 	"path/filepath"
 	"path/filepath"
+	"regexp"
+	"strings"
 	"sync"
 	"sync"
 	"time"
 	"time"
 )
 )
@@ -93,9 +96,26 @@ func (r *DateRotator) rotate(newDate string) error {
 	// 更新日期
 	// 更新日期
 	r.currentDate = newDate
 	r.currentDate = newDate
 
 
-	// 直接使用传入的文件名,不再对文件名进行附加日期的处理
-	// 因为在log.go中已经对文件名进行了日期格式化
-	filename := r.Filename
+	// 根据文件名格式更新日期部分
+	var filename string
+	if strings.Contains(r.Filename, "%s") {
+		// 如果文件名中有格式化占位符,直接使用新日期替换
+		filename = fmt.Sprintf(r.Filename, newDate)
+	} else {
+		// 如果没有占位符,则检查文件名是否已经包含日期格式
+		ext := filepath.Ext(r.Filename)
+		base := r.Filename[:len(r.Filename)-len(ext)]
+
+		// 如果文件名中已经有日期格式(如api-2025-05-26.log),则替换日期部分
+		datePattern := regexp.MustCompile(`-\d{4}-\d{2}-\d{2}`)
+		if datePattern.MatchString(base) {
+			base = datePattern.ReplaceAllString(base, "-"+newDate)
+			filename = base + ext
+		} else {
+			// 否则在扩展名前添加日期
+			filename = base + "-" + newDate + ext
+		}
+	}
 
 
 	// 确保目录存在
 	// 确保目录存在
 	dir := filepath.Dir(filename)
 	dir := filepath.Dir(filename)