// Package logger define log struct of modelRT project package logger import ( "context" "sync" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) var ( f *facade fOnce sync.Once ) type facade struct { _logger *zap.Logger } // Debug define facade func of debug level log func Debug(ctx context.Context, msg string, kv ...any) { logFacade().log(ctx, zapcore.DebugLevel, msg, kv...) } // Info define facade func of info level log func Info(ctx context.Context, msg string, kv ...any) { logFacade().log(ctx, zapcore.InfoLevel, msg, kv...) } // Warn define facade func of warn level log func Warn(ctx context.Context, msg string, kv ...any) { logFacade().log(ctx, zapcore.WarnLevel, msg, kv...) } // Error define facade func of error level log func Error(ctx context.Context, msg string, kv ...any) { logFacade().log(ctx, zapcore.ErrorLevel, msg, kv...) } func (f *facade) log(ctx context.Context, lvl zapcore.Level, msg string, kv ...any) { fields := makeLogFields(ctx, kv...) ce := f._logger.Check(lvl, msg) ce.Write(fields...) } func logFacade() *facade { fOnce.Do(func() { f = &facade{ _logger: GetLoggerInstance(), } }) return f }