package logger import ( "log/slog" "os" "strings" "github.com/lmittmann/tint" ) var defaultLogger *slog.Logger // InitLogger инициализирует логгер slog по умолчанию на основе предоставленного уровня и формата. func InitLogger(levelStr, format string) *slog.Logger { var level slog.Level switch strings.ToLower(levelStr) { 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(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. defaultLogger = InitLogger("info", "text") } return defaultLogger.With(slog.String("op", op)) }