package logger import ( "os" "mengstack/internal/config" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) func New(cfg config.LogConfig) (*zap.Logger, error) { var level zapcore.Level if err := level.UnmarshalText([]byte(cfg.Level)); err != nil { level = zapcore.InfoLevel } encoderConfig := zap.NewProductionEncoderConfig() encoderConfig.TimeKey = "time" encoderConfig.MessageKey = "msg" encoderConfig.LevelKey = "level" encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder encoderConfig.EncodeLevel = zapcore.LowercaseLevelEncoder var encoder zapcore.Encoder if cfg.Format == "console" { encoder = zapcore.NewConsoleEncoder(encoderConfig) } else { encoder = zapcore.NewJSONEncoder(encoderConfig) } core := zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), level) return zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel)), nil }