package logger import ( "log/slog" "os" "strings" "yobble-gateway-go/internal/config" "github.com/lmittmann/tint" ) var defaultLogger *slog.Logger // InitLogger инициализирует логгер slog по умолчанию на основе предоставленного уровня и формата. func InitLogger(cfg *config.LogConfig) *slog.Logger { var level slog.Level switch strings.ToLower(cfg.Level) { case "debug": level = slog.LevelDebug case "info": level = slog.LevelInfo case "warn": level = slog.LevelWarn case "error": level = slog.LevelError default: level = slog.LevelInfo } var handler slog.Handler output := os.Stdout switch strings.ToLower(cfg.Format) { case "json": handler = slog.NewJSONHandler(output, &slog.HandlerOptions{ Level: level, }) case "text": handler = tint.NewHandler(output, &tint.Options{ Level: level, TimeFormat: "15:04:05", // HH:MM:SS AddSource: false, // Optional: set to true to add file:line }) default: handler = tint.NewHandler(output, &tint.Options{ Level: level, TimeFormat: "15:04:05", AddSource: false, }) // Default to colored Text if unknown } defaultLogger = slog.New(handler) slog.SetDefault(defaultLogger) return defaultLogger } // NewLoggerWithOp создает новый экземпляр логгера с установленным полем "op". func NewLoggerWithOp(op string) *slog.Logger { if defaultLogger == nil { // Fallback if InitLogger was not called, though it should be. logConfig := config.LogConfig{ Level: "info", Format: "text", } defaultLogger = InitLogger(&logConfig) } return defaultLogger.With(slog.String("op", op)) }