light před 6 měsíci
rodič
revize
9043a499e3
5 změnil soubory, kde provedl 60 přidání a 8 odebrání
  1. 2 0
      .gitignore
  2. 1 0
      go.mod
  3. 2 0
      go.sum
  4. 1 1
      main.go
  5. 54 7
      utils/logger.go

+ 2 - 0
.gitignore

@@ -5,3 +5,5 @@
 # 本地环境文件
 .env
 .env.example
+# 日志文件
+logs/

+ 1 - 0
go.mod

@@ -31,6 +31,7 @@ require (
 	github.com/go-sql-driver/mysql v1.7.0 // indirect
 	github.com/jinzhu/inflection v1.0.0 // indirect
 	github.com/jinzhu/now v1.1.5 // indirect
+	github.com/natefinch/lumberjack v2.0.0+incompatible
 	go.mongodb.org/mongo-driver v1.17.3
 	golang.org/x/sys v0.30.0 // indirect
 	golang.org/x/text v0.22.0 // indirect

+ 2 - 0
go.sum

@@ -25,6 +25,8 @@ github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGC
 github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
 github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE=
 github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
+github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM=
+github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk=
 github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
 github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
 github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=

+ 1 - 1
main.go

@@ -22,7 +22,7 @@ func main() {
 		panic("Failed to load config: " + err.Error())
 	}
 	// 初始化日志
-	utils.InitLogger(cfg.LogLevel)
+	utils.InitLogger("logs", cfg.LogLevel)
 
 	//初始化其他服务
 	services.Initialize(cfg)

+ 54 - 7
utils/logger.go

@@ -1,20 +1,67 @@
-// utils/logger.go
 package utils
 
 import (
+	"os"
+	"path/filepath"
+	"strings"
+
+	"github.com/natefinch/lumberjack"
 	"github.com/sirupsen/logrus"
 )
 
 var Logger *logrus.Logger
 
-func InitLogger(level string) {
+func InitLogger(logDir string, levelConf string) {
 	Logger = logrus.New()
-	Logger.SetFormatter(&logrus.JSONFormatter{})
 
-	logLevel, err := logrus.ParseLevel(level)
+	// 获取项目根目录路径
+	projectRoot, err := os.Getwd()
 	if err != nil {
-		Logger.SetLevel(logrus.InfoLevel)
-	} else {
-		Logger.SetLevel(logLevel)
+		panic(err)
+	}
+
+	// 组合日志目录路径
+	logPath := filepath.Join(projectRoot, logDir)
+
+	// 确保日志目录存在
+	if err := os.MkdirAll(logPath, 0755); err != nil {
+		panic(err)
 	}
+
+	logFile := filepath.Join(logPath, "policy-service.log")
+
+	// 配置日志切割
+	lumberjackLogger := &lumberjack.Logger{
+		Filename:   logFile,
+		MaxSize:    100,  // 每个日志文件最大100MB
+		MaxBackups: 30,   // 保留30个旧日志文件
+		MaxAge:     30,   // 保留30天
+		Compress:   true, // 压缩旧日志
+		LocalTime:  true, // 使用本地时间切割
+	}
+
+	Logger.SetOutput(lumberjackLogger)
+	Logger.SetFormatter(&logrus.JSONFormatter{})
+
+	// 从环境变量获取日志级别,默认为info
+	if levelConf == "" {
+		levelConf = "info"
+	}
+
+	// 分割多个级别
+	levelStrs := strings.Split(levelConf, ",")
+	var levels []logrus.Level
+	for _, lvlStr := range levelStrs {
+		level, err := logrus.ParseLevel(strings.TrimSpace(lvlStr))
+		if err != nil {
+			Logger.Warnf("无效的日志级别%s,跳过", lvlStr)
+			continue
+		}
+		levels = append(levels, level)
+	}
+
+	if len(levels) == 0 {
+		levels = []logrus.Level{logrus.InfoLevel} // 默认级别
+	}
+
 }