package logger import ( "os" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) // New creates a new configured logger func New(logLevel string) *zap.Logger { // Parse log level var level zapcore.Level err := level.UnmarshalText([]byte(logLevel)) if err != nil { // Default to info level if parsing fails level = zapcore.InfoLevel } // Create encoder config encoderConfig := zapcore.EncoderConfig{ TimeKey: "time", LevelKey: "level", NameKey: "logger", CallerKey: "caller", MessageKey: "msg", StacktraceKey: "stacktrace", LineEnding: zapcore.DefaultLineEnding, EncodeLevel: zapcore.LowercaseLevelEncoder, EncodeTime: zapcore.ISO8601TimeEncoder, EncodeDuration: zapcore.MillisDurationEncoder, EncodeCaller: zapcore.ShortCallerEncoder, } // Create core core := zapcore.NewCore( zapcore.NewJSONEncoder(encoderConfig), zapcore.AddSync(os.Stdout), level, ) // Create logger with caller information return zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel)) }