package logger import ( "log" "go.uber.org/zap" ) // Logger defines the interface for logging type Logger interface { Info(msg string, fields ...interface{}) Error(msg string, fields ...interface{}) Debug(msg string, fields ...interface{}) Warn(msg string, fields ...interface{}) } type zapLogger struct { logger *zap.SugaredLogger } func NewLogger(mode string) Logger { var l *zap.Logger var err error if mode == "release" { l, err = zap.NewProduction() } else { l, err = zap.NewDevelopment() } if err != nil { log.Fatalf("Failed to initialize logger: %v", err) } return &zapLogger{logger: l.Sugar()} } func (l *zapLogger) Info(msg string, fields ...interface{}) { l.logger.Infow(msg, fields...) } func (l *zapLogger) Error(msg string, fields ...interface{}) { l.logger.Errorw(msg, fields...) } func (l *zapLogger) Debug(msg string, fields ...interface{}) { l.logger.Debugw(msg, fields...) } func (l *zapLogger) Warn(msg string, fields ...interface{}) { l.logger.Warnw(msg, fields...) }