From fa174f7ca262c40fc1789db5bff13e59341a9d82 Mon Sep 17 00:00:00 2001 From: valitovgaziz Date: Mon, 2 Feb 2026 04:12:07 +0500 Subject: [PATCH] modified: cmd/main.go modified: go.mod modified: go.sum new file: internal/logger/logger.go add zapplogger initiator --- main_dc/yalarba/api_yal/cmd/main.go | 16 ++++- main_dc/yalarba/api_yal/go.mod | 3 + main_dc/yalarba/api_yal/go.sum | 4 ++ .../yalarba/api_yal/internal/logger/logger.go | 66 +++++++++++++++++++ 4 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 main_dc/yalarba/api_yal/internal/logger/logger.go diff --git a/main_dc/yalarba/api_yal/cmd/main.go b/main_dc/yalarba/api_yal/cmd/main.go index 886300d..cf795e2 100644 --- a/main_dc/yalarba/api_yal/cmd/main.go +++ b/main_dc/yalarba/api_yal/cmd/main.go @@ -3,12 +3,23 @@ package main import ( "log" "net/http" - + + "api_yal/internal/config" "api_yal/internal/handlers" "api_yal/internal/server" + "api_yal/internal/logger" ) func main() { + // Загрузка конфигурации приложения из файлов окружения или конфигурационных файлов + // Конфигурация включает параметры БД, уровень логирования, порт приложения и т.д. + cfg := config.Load() + + + // Инициализация логгера с указанным уровнем логирования и окружением (dev/prod) + // Логгер будет настроен соответствующим образом для заданного окружения + logger.Init(cfg.LogLevel, cfg.Environment) + // Создаем маршрутизатор mux := http.NewServeMux() @@ -22,4 +33,5 @@ func main() { if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("Server failed to start: %v", err) } -} \ No newline at end of file +} + diff --git a/main_dc/yalarba/api_yal/go.mod b/main_dc/yalarba/api_yal/go.mod index d6431bd..ebfe147 100644 --- a/main_dc/yalarba/api_yal/go.mod +++ b/main_dc/yalarba/api_yal/go.mod @@ -4,8 +4,11 @@ go 1.22.5 require gorm.io/gorm v1.31.1 +require go.uber.org/multierr v1.10.0 // indirect + require ( github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect + go.uber.org/zap v1.27.1 golang.org/x/text v0.20.0 // indirect ) diff --git a/main_dc/yalarba/api_yal/go.sum b/main_dc/yalarba/api_yal/go.sum index 5fb7c82..7024308 100644 --- a/main_dc/yalarba/api_yal/go.sum +++ b/main_dc/yalarba/api_yal/go.sum @@ -2,6 +2,10 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= +go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= gorm.io/gorm v1.31.1 h1:7CA8FTFz/gRfgqgpeKIBcervUn3xSyPUmr6B2WXJ7kg= diff --git a/main_dc/yalarba/api_yal/internal/logger/logger.go b/main_dc/yalarba/api_yal/internal/logger/logger.go new file mode 100644 index 0000000..4602535 --- /dev/null +++ b/main_dc/yalarba/api_yal/internal/logger/logger.go @@ -0,0 +1,66 @@ +// 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() +} \ No newline at end of file