// pkg/logger/logger.go package logger import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" ) var globalLogger *zap.Logger // Init инициализирует глобальный логгер func Init(level string, environment string) error { var config zap.Config if environment == "production" { config = zap.NewProductionConfig() } else { config = zap.NewDevelopmentConfig() config.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder } // Устанавливаем уровень логирования switch level { case "debug": config.Level = zap.NewAtomicLevelAt(zap.DebugLevel) case "info": config.Level = zap.NewAtomicLevelAt(zap.InfoLevel) case "warn": config.Level = zap.NewAtomicLevelAt(zap.WarnLevel) case "error": config.Level = zap.NewAtomicLevelAt(zap.ErrorLevel) default: config.Level = zap.NewAtomicLevelAt(zap.InfoLevel) } logger, err := config.Build() if err != nil { return err } globalLogger = logger return nil } // Get возвращает глобальный логгер func Get() *zap.Logger { if globalLogger == nil { // Fallback на стандартный логгер если не инициализирован logger, _ := zap.NewProduction() return logger } return globalLogger } // Sync синхронизирует буферы логгера func Sync() { if globalLogger != nil { globalLogger.Sync() } } // Sugar возвращает SugaredLogger func Sugar() *zap.SugaredLogger { return Get().Sugar() }