package logger import ( "os" "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" "photography-backend/internal/config" ) // InitLogger 初始化日志记录器 func InitLogger(cfg *config.LoggerConfig) (*zap.Logger, error) { // 设置日志级别 var level zapcore.Level switch cfg.Level { case "debug": level = zapcore.DebugLevel case "info": level = zapcore.InfoLevel case "warn": level = zapcore.WarnLevel case "error": level = zapcore.ErrorLevel default: level = zapcore.InfoLevel } // 创建编码器配置 encoderConfig := zap.NewProductionEncoderConfig() encoderConfig.TimeKey = "timestamp" encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder // 创建编码器 var encoder zapcore.Encoder if cfg.Format == "json" { encoder = zapcore.NewJSONEncoder(encoderConfig) } else { encoder = zapcore.NewConsoleEncoder(encoderConfig) } // 创建写入器 var writers []zapcore.WriteSyncer // 控制台输出 writers = append(writers, zapcore.AddSync(os.Stdout)) // 文件输出 if cfg.Output == "file" && cfg.Filename != "" { // 确保日志目录存在 if err := os.MkdirAll("logs", 0755); err != nil { return nil, err } fileWriter := &lumberjack.Logger{ Filename: cfg.Filename, MaxSize: cfg.MaxSize, MaxAge: cfg.MaxAge, MaxBackups: 10, LocalTime: true, Compress: cfg.Compress, } writers = append(writers, zapcore.AddSync(fileWriter)) } // 合并写入器 writer := zapcore.NewMultiWriteSyncer(writers...) // 创建核心 core := zapcore.NewCore(encoder, writer, level) // 创建日志记录器 logger := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1)) return logger, nil }