package utils import ( "io" "os" "path/filepath" "strings" "time" "github.com/natefinch/lumberjack" "github.com/sirupsen/logrus" ) var Logger *logrus.Logger func InitLogger(logDir string, levelConf string) { Logger = logrus.New() // --- 目录准备(和之前一样) --- cwd, err := os.Getwd() if err != nil { panic(err) } fullLogDir := filepath.Join(cwd, logDir) if err := os.MkdirAll(fullLogDir, 0755); err != nil { panic(err) } // --- 滚动文件 + stdout --- currentDate := time.Now().Format("20060102") fileWriter := &lumberjack.Logger{ Filename: filepath.Join(fullLogDir, "policy-service-"+currentDate+".log"), MaxSize: 100, MaxBackups: 30, MaxAge: 30, Compress: true, LocalTime: true, } mw := io.MultiWriter(fileWriter, os.Stdout) Logger.SetOutput(mw) Logger.SetFormatter(&logrus.JSONFormatter{ TimestampFormat: time.RFC3339, }) // --- 解析环境变量里的多个级别 --- if levelConf == "" { levelConf = "info" } levelStrs := strings.Split(levelConf, ",") var desired []logrus.Level for _, s := range levelStrs { if lvl, err := logrus.ParseLevel(strings.TrimSpace(s)); err == nil { desired = append(desired, lvl) } else { Logger.Warnf("忽略无效日志级别:%q", s) } } if len(desired) == 0 { desired = []logrus.Level{logrus.InfoLevel} } // --- 在 desired 里找到“数值最大的那个”(也就是最低阈值) --- threshold := desired[0] for _, lvl := range desired[1:] { if lvl > threshold { threshold = lvl } } Logger.SetLevel(threshold) Logger.Infof("日志阈值已设置为 %s", threshold.String()) }