package utils import ( "os" "path/filepath" "strings" "github.com/natefinch/lumberjack" "github.com/sirupsen/logrus" ) var Logger *logrus.Logger func InitLogger(logDir string, levelConf string) { Logger = logrus.New() // 获取项目根目录路径 projectRoot, err := os.Getwd() if err != nil { 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} // 默认级别 } }