package logger import ( "os" "path/filepath" "carrotskin/pkg/config" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) // New 创建新的日志记录器 func New(cfg config.LogConfig) (*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 } // 配置编码器 var encoder zapcore.Encoder encoderConfig := zap.NewProductionEncoderConfig() encoderConfig.TimeKey = "timestamp" encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder if cfg.Format == "console" { encoder = zapcore.NewConsoleEncoder(encoderConfig) } else { encoder = zapcore.NewJSONEncoder(encoderConfig) } // 配置输出 var writeSyncer zapcore.WriteSyncer if cfg.Output == "" || cfg.Output == "stdout" { writeSyncer = zapcore.AddSync(os.Stdout) } else { // 自动创建日志目录 logDir := filepath.Dir(cfg.Output) if err := os.MkdirAll(logDir, 0755); err != nil { return nil, err } file, err := os.OpenFile(cfg.Output, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { return nil, err } writeSyncer = zapcore.AddSync(file) } // 创建核心 core := zapcore.NewCore(encoder, writeSyncer, level) // 创建日志记录器 logger := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1)) return logger, nil }