[{"data":1,"prerenderedAt":3154},["ShallowReactive",2],{"navigation":3,"-docs-working-with-the-rest-api-logger":459,"-docs-working-with-the-rest-api-logger-description":3143},[4],{"title":5,"path":6,"stem":7,"children":8,"page":47},"Docs","\u002Fdocs","docs",[9,78,351],{"title":10,"path":11,"stem":12,"children":13,"restApiVersion":15,"category":15,"description":15,"badge":15},"Начало работы","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,17,48,63],{"title":10,"path":11,"stem":12,"restApiVersion":15,"category":15,"description":16,"badge":15},null,"Краткое руководство по работе с SDK для REST API Bitrix24",{"title":18,"path":19,"stem":20,"children":21,"page":47},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",[22,27,32,37,42],{"title":23,"path":24,"stem":25,"restApiVersion":15,"category":15,"description":26,"badge":15},"Vue","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fvue","docs\u002F1.getting-started\u002F2.installation\u002F1.vue","Руководство по установке Bitrix24 JS SDK в приложениях Vue.",{"title":28,"path":29,"stem":30,"restApiVersion":15,"category":15,"description":31,"badge":15},"Nuxt","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnuxt","docs\u002F1.getting-started\u002F2.installation\u002F2.nuxt","Руководство по установке Bitrix24 JS SDK в приложениях Nuxt.",{"title":33,"path":34,"stem":35,"restApiVersion":15,"category":15,"description":36,"badge":15},"React","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Freact","docs\u002F1.getting-started\u002F2.installation\u002F3.react","Руководство по установке Bitrix24 JS SDK в приложениях React.",{"title":38,"path":39,"stem":40,"restApiVersion":15,"category":15,"description":41,"badge":15},"Node.js","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnodejs","docs\u002F1.getting-started\u002F2.installation\u002F4.nodejs","Руководство по установке Bitrix24 JS SDK в приложениях Node.js.",{"title":43,"path":44,"stem":45,"restApiVersion":15,"category":15,"description":46,"badge":15},"UMD","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fumd","docs\u002F1.getting-started\u002F2.installation\u002F5.umd","Руководство по использованию UMD-версии Bitrix24 JS SDK в ваших приложениях.",false,{"title":49,"restApiVersion":15,"category":15,"description":15,"badge":15,"shadow":47,"path":50,"stem":51,"children":52,"page":47},"Migration","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration",[53,58],{"title":54,"path":55,"stem":56,"restApiVersion":15,"category":15,"description":57,"badge":15},"v0 → v1","\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv1","docs\u002F1.getting-started\u002F3.migration\u002F1.v1","Подробное руководство по миграции приложения с Bitrix24 JS SDK v0 на Bitrix24 JS SDK v1.",{"title":59,"path":60,"stem":61,"restApiVersion":15,"category":15,"description":62,"badge":15},"v2 → v3","\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv3","docs\u002F1.getting-started\u002F3.migration\u002F2.v3","Как уйти с устаревшей REST-поверхности, которая удаляется в Bitrix24 JS SDK 3.0.0.",{"title":64,"restApiVersion":15,"category":15,"description":15,"badge":15,"path":65,"stem":66,"children":67,"page":47},"AI-инструменты","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[68,73],{"title":69,"path":70,"stem":71,"restApiVersion":15,"category":15,"description":72,"badge":15},"Навыки","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fskills","docs\u002F1.getting-started\u002F7.ai\u002F1.skills","Узкоспециализированные skill-файлы для AI-агентов разработчика, работающих с @bitrix24\u002Fb24jssdk.",{"title":74,"path":75,"stem":76,"restApiVersion":15,"category":15,"description":77,"badge":15},"LLMs.txt","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fllms-txt","docs\u002F1.getting-started\u002F7.ai\u002F2.llms-txt","Как сделать, чтобы AI-инструменты вроде Cursor, Windsurf, GitHub Copilot, ChatGPT и Claude понимали методы, инструменты и лучшие практики Bitrix24 JS SDK.",{"title":79,"path":80,"stem":81,"children":82,"restApiVersion":15,"category":15,"description":15,"badge":15},"Работа с REST API","\u002Fdocs\u002Fworking-with-the-rest-api","docs\u002F2.working-with-the-rest-api\u002F0.index",[83,86,93,98,103,107,112,116,121,126,130,135,140,145,150,155,160,165,170,175,179,184,189,194,200,205,210,215,220,225,230,235,240,245,251,256,261,267,272,277,282,287,293,299,305,310,315,320,326,331,336,341,346],{"title":84,"path":80,"stem":81,"restApiVersion":15,"category":15,"description":85,"badge":15},"Введение","Обзор возможностей SDK для работы с REST API Bitrix24",{"title":87,"path":88,"stem":89,"restApiVersion":90,"category":91,"description":92,"badge":15},"Call","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F1.call-rest-api-ver2","rest-api-ver2","actions","Метод для вызовов REST API Bitrix24 версии 2.",{"title":87,"path":94,"stem":95,"restApiVersion":96,"category":91,"description":97,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F1.call-rest-api-ver3","rest-api-ver3","Метод для вызовов REST API Bitrix24 версии 3.",{"title":99,"path":100,"stem":101,"restApiVersion":90,"category":91,"description":102,"badge":15},"CallList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-list-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F2.call-list-rest-api-ver2","Метод для быстрого получения всех данных из list-методов REST API Bitrix24 версии 2.",{"title":99,"path":104,"stem":105,"restApiVersion":96,"category":91,"description":106,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-list-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F2.call-list-rest-api-ver3","Метод для быстрого получения всех данных из list-методов REST API Bitrix24 версии 3.",{"title":108,"path":109,"stem":110,"restApiVersion":90,"category":91,"description":111,"badge":15},"FetchList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffetch-list-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F2.fetch-list-rest-api-ver2","Возвращает AsyncGenerator, позволяющий обрабатывать данные из list-методов REST API Bitrix24 версии 2 по мере поступления, не загружая весь массив в память сразу. Особенно полезно при работе с очень большими объёмами данных.",{"title":108,"path":113,"stem":114,"restApiVersion":96,"category":91,"description":115,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffetch-list-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F2.fetch-list-rest-api-ver3","Возвращает AsyncGenerator, позволяющий обрабатывать данные из list-методов REST API Bitrix24 версии 3 по мере поступления, не загружая весь массив в память сразу. Особенно полезно при работе с очень большими объёмами данных.",{"title":117,"path":118,"stem":119,"restApiVersion":15,"category":117,"description":120,"badge":15},"B24Hook","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhook","docs\u002F2.working-with-the-rest-api\u002F20.hook","Серверная точка входа для работы с REST API Bitrix24 через входящий вебхук (постоянный токен).",{"title":122,"path":123,"stem":124,"restApiVersion":90,"category":91,"description":125,"badge":15},"Batch","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F3.batch-rest-api-ver2","Метод для выполнения пакетных запросов к REST API Bitrix24 версии 2. Позволяет выполнить до 50 команд в одном API-вызове.",{"title":122,"path":127,"stem":128,"restApiVersion":96,"category":91,"description":129,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F3.batch-rest-api-ver3","Метод для выполнения пакетных запросов к REST API Bitrix24 версии 3. Позволяет выполнить до 50 команд в одном API-вызове.",{"title":84,"path":131,"stem":132,"restApiVersion":15,"category":133,"description":134,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe","docs\u002F2.working-with-the-rest-api\u002F30.frame","B24Frame","Предназначен для управления приложениями Bitrix24, работающими внутри placement-iframe. Наследуется от AbstractB24 и предоставляет менеджеры для аутентификации, обмена сообщениями с родительским окном, слайдеров, диалогов, placement и опций.",{"title":136,"path":137,"stem":138,"restApiVersion":15,"category":133,"description":139,"badge":15},"Инициализация","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-initialize-b24-frame","docs\u002F2.working-with-the-rest-api\u002F30.frame-initialize-b24-frame","Функция предназначена для инициализации B24Frame",{"title":141,"path":142,"stem":143,"restApiVersion":15,"category":133,"description":144,"badge":15},"Авторизация","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-auth","docs\u002F2.working-with-the-rest-api\u002F31.frame-auth","Предназначен для управления аутентификацией в приложениях Bitrix24. Обрабатывает данные аутентификации, полученные от родительского окна, и предоставляет методы для их обновления и получения.",{"title":146,"path":147,"stem":148,"restApiVersion":15,"category":133,"description":149,"badge":15},"Диалог","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-dialog","docs\u002F2.working-with-the-rest-api\u002F31.frame-dialog","Оборачивает системные диалоги BX24 (выбор пользователя, выбор прав доступа, выбор CRM-сущности), чтобы их можно было открывать изнутри iframe приложения Bitrix24.",{"title":151,"path":152,"stem":153,"restApiVersion":15,"category":133,"description":154,"badge":15},"Опции","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-options","docs\u002F2.working-with-the-rest-api\u002F31.frame-options","Используется для управления настройками приложения и пользователя в приложении Bitrix24. Позволяет инициализировать данные, получать и устанавливать опции через сообщения родительскому окну.",{"title":156,"path":157,"stem":158,"restApiVersion":15,"category":133,"description":159,"badge":15},"Родительское окно","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-parent","docs\u002F2.working-with-the-rest-api\u002F31.frame-parent","Предоставляет методы для управления родительским окном приложения в Bitrix24, включая изменение размера окна, управление прокруткой, инициацию звонков и открытие мессенджера.",{"title":161,"path":162,"stem":163,"restApiVersion":15,"category":133,"description":164,"badge":15},"Placement","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-placement","docs\u002F2.working-with-the-rest-api\u002F31.frame-placement","Используется для управления placement виджетов в приложении Bitrix24.",{"title":166,"path":167,"stem":168,"restApiVersion":15,"category":133,"description":169,"badge":15},"Слайдер","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-slider","docs\u002F2.working-with-the-rest-api\u002F31.frame-slider","Предоставляет методы для работы со слайдерами в приложении Bitrix24. Позволяет открывать и закрывать слайдеры, а также управлять их содержимым.",{"title":171,"path":172,"stem":173,"restApiVersion":90,"category":91,"description":174,"badge":15},"BatchByChunk","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-by-chunk-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F4.batch-by-chunk-rest-api-ver2","Метод для выполнения пакетных запросов с автоматическим разбиением на чанки для любого числа команд. Автоматически делит большие наборы команд на батчи по 50 и выполняет их последовательно. Используйте только массивы кортежей или массивы объектов.",{"title":171,"path":176,"stem":177,"restApiVersion":96,"category":91,"description":178,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-by-chunk-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F4.batch-by-chunk-rest-api-ver3","Метод для выполнения пакетных запросов к REST API Bitrix24 версии 3 с автоматическим разбиением на чанки для любого числа команд. Автоматически делит большие наборы команд на батчи по 50 и выполняет их последовательно. Используйте только массивы кортежей или массивы объектов.",{"title":180,"path":181,"stem":182,"restApiVersion":15,"category":180,"description":183,"badge":15},"B24OAuth","\u002Fdocs\u002Fworking-with-the-rest-api\u002Foauth","docs\u002F2.working-with-the-rest-api\u002F40.oauth","Серверная точка входа для работы с REST API Bitrix24 по access token OAuth 2.0 (с автоматическим обновлением).",{"title":185,"path":186,"stem":187,"restApiVersion":15,"category":15,"description":188,"badge":15},"Выбор метода","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fchoosing-the-right-method","docs\u002F2.working-with-the-rest-api\u002F5.choosing-the-right-method","Руководство по выбору между Call, CallList, FetchList, Batch и BatchByChunk в REST API v2 и v3.",{"title":190,"path":191,"stem":192,"restApiVersion":15,"category":15,"description":193,"badge":15},"Фильтрация","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffiltering","docs\u002F2.working-with-the-rest-api\u002F5.filtering","Справочник по построению параметров фильтра в Bitrix24 REST API v2 (префиксные операторы) и v3 (массив троек), включая формат дат и правило отбрасывания order.",{"title":195,"path":196,"stem":197,"restApiVersion":15,"category":198,"description":199,"badge":15},"B24HelperManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper","docs\u002F2.working-with-the-rest-api\u002F50.helper","Helper","Агрегирующий менеджер, который загружает данные профиля, приложения, оплаты, лицензии, валют и опций одним батч-запросом REST, а также подключает Pull-клиент.",{"title":201,"path":202,"stem":203,"restApiVersion":15,"category":198,"description":204,"badge":15},"useB24Helper","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-use-b24-helper","docs\u002F2.working-with-the-rest-api\u002F51.helper-use-b24-helper","Основанный на замыкании composable, который владеет единственным экземпляром B24HelperManager и предоставляет хелперы жизненного цикла (init \u002F destroy \u002F связка с Pull-клиентом).",{"title":206,"path":207,"stem":208,"restApiVersion":15,"category":198,"description":209,"badge":15},"ProfileManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-profile-manager","docs\u002F2.working-with-the-rest-api\u002F52.helper-profile-manager","Разобранный ответ REST-метода `profile`: id, имя, фамилия, пол, фото, часовой пояс, флаг администратора.",{"title":211,"path":212,"stem":213,"restApiVersion":15,"category":198,"description":214,"badge":15},"AppManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-app-manager","docs\u002F2.working-with-the-rest-api\u002F53.helper-app-manager","Разобранный ответ REST-метода `app.info`: id приложения, код, версия, статус, флаг установки.",{"title":216,"path":217,"stem":218,"restApiVersion":15,"category":198,"description":219,"badge":15},"PaymentManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-payment-manager","docs\u002F2.working-with-the-rest-api\u002F54.helper-payment-manager","Статус оплаты приложения Bitrix24 — извлекается из `app.info`.",{"title":221,"path":222,"stem":223,"restApiVersion":15,"category":198,"description":224,"badge":15},"LicenseManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-license-manager","docs\u002F2.working-with-the-rest-api\u002F55.helper-license-manager","Информация о лицензии Bitrix24 из `app.info` — и автоматическая перенастройка менеджера ограничений под соответствующий тарифный план.",{"title":226,"path":227,"stem":228,"restApiVersion":15,"category":198,"description":229,"badge":15},"CurrencyManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-currency-manager","docs\u002F2.working-with-the-rest-api\u002F56.helper-currency-manager","Каталог валют, кэшируемый в памяти — базовая валюта, форматтеры для каждой валюты и форматтер числа в строку.",{"title":231,"path":232,"stem":233,"restApiVersion":15,"category":198,"description":234,"badge":15},"OptionsManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-options-manager","docs\u002F2.working-with-the-rest-api\u002F57.helper-options-manager","Типизированный доступ к `app.option.get` \u002F `user.option.get`, плюс save(), который батчит `*.option.set` с необязательным Pull-уведомлением.",{"title":236,"path":237,"stem":238,"restApiVersion":15,"category":15,"description":239,"badge":15},"Ошибки","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ferrors","docs\u002F2.working-with-the-rest-api\u002F6.errors","Справочник кодов SdkError и AjaxError, выбрасываемых SDK, плюс коды ошибок REST Bitrix24, которые через них проявляются.",{"title":241,"path":242,"stem":243,"restApiVersion":15,"category":241,"description":244,"badge":15},"Pull","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fpull","docs\u002F2.working-with-the-rest-api\u002F60.pull","Поток сообщений в реальном времени от Bitrix24 к вашему приложению — WebSocket как основной канал, long-polling как запасной. Только для фрейма.",{"title":246,"path":247,"stem":248,"restApiVersion":15,"category":249,"description":250,"badge":15},"Logger","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger","docs\u002F2.working-with-the-rest-api\u002F66.logger","logger","Логгер, вдохновлённый PHP Monolog, предоставляет структурированную систему логирования с поддержкой каналов, обработчиков, процессоров и форматтеров. Реализация следует принципам PSR-3 и паттерну цепочки ответственности.",{"title":252,"path":253,"stem":254,"restApiVersion":15,"category":249,"description":255,"badge":15},"Telegram","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger-telegram","docs\u002F2.working-with-the-rest-api\u002F66.logger-telegram","Отправка логов в Telegram",{"title":257,"path":258,"stem":259,"restApiVersion":15,"category":15,"description":260,"badge":15},"Обнаружение v3-методов","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fdiscovering-v3-methods","docs\u002F2.working-with-the-rest-api\u002F7.discovering-v3-methods","Используйте rest.documentation.openapi, чтобы получить собственный машиночитаемый список всех доступных методов REST API v3 портала — источник истины, на который SDK опирается вместо захардкоженного allowlist. Особенно полезно для AI-агентов и кодогенерации.",{"title":262,"path":263,"stem":264,"restApiVersion":15,"category":265,"description":266,"badge":15},"AjaxResult","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-ajax-result","docs\u002F2.working-with-the-rest-api\u002F70.core-ajax-result","Core","Специализированный Result, возвращаемый каждым REST-хелпером. Предоставляет `isMore() \u002F getNext() \u002F getTotal() \u002F getStatus()` для постраничных ответов и неизменяемые данные.",{"title":268,"path":269,"stem":270,"restApiVersion":15,"category":265,"description":271,"badge":15},"Http","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-http","docs\u002F2.working-with-the-rest-api\u002F70.core-http","Низкоуровневый интерфейс транспорта, возвращаемый `b24.getHttpClient(version)`. Прямой доступ к axios-клиентам, параметрам ограничений, статистике и сбросу.",{"title":273,"path":274,"stem":275,"restApiVersion":15,"category":265,"description":276,"badge":15},"B24LangList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-lang-list","docs\u002F2.working-with-the-rest-api\u002F70.core-lang-list","Enum языков интерфейса облачного Bitrix24 плюс карта локалей BCP-47.",{"title":278,"path":279,"stem":280,"restApiVersion":15,"category":265,"description":281,"badge":15},"RequestIdGenerator","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-request-id-generator","docs\u002F2.working-with-the-rest-api\u002F70.core-request-id-generator","Реализация `IRequestIdGenerator` по умолчанию. Генерирует request id в формате UUID v7 и предоставляет имена HTTP-заголовка \u002F query-параметра, используемые SDK.",{"title":283,"path":284,"stem":285,"restApiVersion":15,"category":265,"description":286,"badge":15},"Result","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-result","docs\u002F2.working-with-the-rest-api\u002F70.core-result","Обобщённый результат операции с флагом успеха, данными и картой ошибок. Аналог \\\\Bitrix\\\\Main\\\\Result из Bitrix Framework.",{"title":288,"path":289,"stem":290,"restApiVersion":15,"category":291,"description":292,"badge":15},"Лимитеры","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flimiters","docs\u002F2.working-with-the-rest-api\u002F77.limiters","limiters","Система ограничений предоставляет комплексный механизм управления частотой запросов, временем выполнения операций и адаптивными задержками.",{"title":294,"path":295,"stem":296,"restApiVersion":15,"category":297,"description":298,"badge":15},"Логирование и редактирование","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogging","docs\u002F2.working-with-the-rest-api\u002F78.logging","logging","Что SDK редактирует автоматически до того, как информация о запросе попадёт в логгер или AjaxError, что он не редактирует, и как подключить кастомный логгер через setLogger(...) без повторного появления утечек учётных данных.",{"title":300,"path":301,"stem":302,"restApiVersion":15,"category":303,"description":304,"badge":15},"Browser","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-browser","docs\u002F2.working-with-the-rest-api\u002F80.tools-browser","tools","Дешёвый детектор user-agent \u002F платформы \u002F возможностей. Полезен для runtime-ветвлений во фронтенд-коде.",{"title":306,"path":307,"stem":308,"restApiVersion":15,"category":303,"description":309,"badge":15},"Text","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-text","docs\u002F2.working-with-the-rest-api\u002F80.tools-text","Утилиты для текста и дат — UUID v4 \u002F v7, кодирование \u002F декодирование HTML-сущностей, преобразования типов, хелперы регистра, `toDateTime` \u002F `toB24Format` на Luxon, форматирование чисел и конструктор query-строки.",{"title":311,"path":312,"stem":313,"restApiVersion":15,"category":303,"description":314,"badge":15},"Type","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-type","docs\u002F2.working-with-the-rest-api\u002F80.tools-type","Runtime type guards — строки, числа, обычные объекты, массивы, DOM-узлы, Blob, FormData, формы JSON-RPC сообщений.",{"title":316,"path":317,"stem":318,"restApiVersion":15,"category":303,"description":319,"badge":15},"useFormatter","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-use-formatters","docs\u002F2.working-with-the-rest-api\u002F80.tools-use-formatters","Composable, возвращающий общие экземпляры `FormatterNumbers` и `FormatterIban`, преднастроенные спецификациями стран.",{"title":321,"path":322,"stem":323,"restApiVersion":15,"category":324,"description":325,"badge":15},"IResult","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftypes-iresult","docs\u002F2.working-with-the-rest-api\u002F90.types-iresult","Types","Обобщённый интерфейс результата операции. Реализуется `Result\u003CT>` и (транзитивно) `AjaxResult\u003CT>`.",{"title":327,"path":328,"stem":329,"restApiVersion":15,"category":324,"description":330,"badge":15},"TypeB24","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftypes-type-b24","docs\u002F2.working-with-the-rest-api\u002F90.types-type-b24","Публичный контракт, реализуемый каждым классом-точкой входа (B24Frame, B24Hook, B24OAuth). Единый источник истины для поверхности SDK.",{"title":332,"path":333,"stem":334,"restApiVersion":15,"category":265,"description":335,"badge":15},"Телеметрия","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftelemetry","docs\u002F2.working-with-the-rest-api\u002F95.telemetry","Query-параметры request id, версии SDK и типа SDK, добавляемые к каждому REST-вызову Bitrix24.",{"title":337,"path":338,"stem":339,"restApiVersion":15,"category":265,"description":340,"badge":15},"Коды ошибок","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ferror-codes","docs\u002F2.working-with-the-rest-api\u002F96.error-codes","Каталог кодов ошибок, которые распознаёт SDK — разделённых на «hard» (выбрасываются) и «soft» (возвращаются как AjaxError внутри AjaxResult).",{"title":342,"path":343,"stem":344,"restApiVersion":15,"category":303,"description":345,"badge":15},"HealthCheck","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-health-check","docs\u002F2.working-with-the-rest-api\u002Ftools-health-check","Метод для проверки доступности REST API Bitrix24. Выполняет простой запрос к REST API для проверки работоспособности сервиса.",{"title":347,"path":348,"stem":349,"restApiVersion":15,"category":303,"description":350,"badge":15},"Ping","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-ping","docs\u002F2.working-with-the-rest-api\u002Ftools-ping","Метод для измерения скорости ответа REST API Bitrix24. Выполняет тестовый запрос и возвращает время ответа в миллисекундах.",{"title":352,"path":353,"stem":354,"children":355,"restApiVersion":15,"category":15,"description":15,"badge":15},"Примеры","\u002Fdocs\u002Fexamples","docs\u002F99.examples\u002F0.index",[356,358,364,369,374,379,384,389,394,399,404,409,414,419,424,429,434,439,444,449,454],{"title":84,"path":353,"stem":354,"restApiVersion":15,"category":15,"description":357,"badge":15},"Рецепты, сочетающие SDK с реалистичными сценариями — аналитика CRM, массовые рассылки, AI-ассистенты, установка по OAuth и не только. Каждый рецепт — отдельный файл, удобный для копирования.",{"title":359,"path":360,"stem":361,"restApiVersion":15,"category":362,"description":363,"badge":15},"Аналитика CRM","\u002Fdocs\u002Fexamples\u002Fcrm-analytics","docs\u002F99.examples\u002F1.crm-analytics","examples","Стримит все сделки через actions.v2.fetchList.make, группирует по стадиям, печатает отчёт по воронке (количество, конверсия %, средний чек, win rate).",{"title":365,"path":366,"stem":367,"restApiVersion":15,"category":362,"description":368,"badge":15},"Сделки → CSV","\u002Fdocs\u002Fexamples\u002Fdashboard-deals-csv","docs\u002F99.examples\u002F1.dashboard-deals-csv","Стримит каждую сделку CRM, подходящую под фильтр по дате, в CSV-файл через вебхук и FetchListV2.",{"title":370,"path":371,"stem":372,"restApiVersion":15,"category":15,"description":373,"badge":15},"Список сущностей","\u002Fdocs\u002Fexamples\u002Fentity-list","docs\u002F99.examples\u002F10.entity-list","Рендерит постраничный список сущностей Bitrix24 с компонентами B24UI и SDK-действием callList.",{"title":375,"path":376,"stem":377,"restApiVersion":15,"category":362,"description":378,"badge":15},"Обработка ошибок","\u002Fdocs\u002Fexamples\u002Ferror-handling","docs\u002F99.examples\u002F10.error-handling","Демонстрирует четыре слоя ошибок (SdkError \u002F AjaxError \u002F сетевые \u002F soft) и настройки hardErrorCodes \u002F softErrorCodes \u002F retryOnNetworkError у менеджера ограничений.",{"title":380,"path":381,"stem":382,"restApiVersion":15,"category":362,"description":383,"badge":15},"Регистрация событий","\u002Fdocs\u002Fexamples\u002Fevent-registration","docs\u002F99.examples\u002F11.event-registration","CLI-инструмент — список, привязка и отвязка исходящих событий вебхуков Bitrix24 через event.get \u002F event.bind \u002F event.unbind. В паре с рецептом обработчика вебхуков.",{"title":385,"path":386,"stem":387,"restApiVersion":15,"category":362,"description":388,"badge":15},"Установка OAuth","\u002Fdocs\u002Fexamples\u002Foauth-install","docs\u002F99.examples\u002F12.oauth-install","Express-сервер, который обрабатывает события ONAPPINSTALL \u002F ONAPPUPDATE \u002F ONAPPUNINSTALL для маркетплейс-приложения Bitrix24, сохраняет токены по порталам и создаёт клиент B24OAuth по требованию с callback обновления, подключённым к хранилищу.",{"title":390,"path":391,"stem":392,"restApiVersion":15,"category":362,"description":393,"badge":15},"Скелет frame-приложения","\u002Fdocs\u002Fexamples\u002Fframe-app-skeleton","docs\u002F99.examples\u002F2.frame-app-skeleton","Минимально жизнеспособное iframe-приложение Bitrix24: рукопожатие init, установка заголовка, сохранение состояния приложения, открытие слайдера, чистое закрытие.",{"title":395,"path":396,"stem":397,"restApiVersion":15,"category":362,"description":398,"badge":15},"Массовые рассылки","\u002Fdocs\u002Fexamples\u002Fmass-messaging","docs\u002F99.examples\u002F2.mass-messaging","Фильтрует контакты в CRM, персонализирует шаблон, отправляет IM-уведомления ответственным менеджерам.",{"title":400,"path":401,"stem":402,"restApiVersion":15,"category":15,"description":403,"badge":15},"Мастер установки","\u002Fdocs\u002Fexamples\u002Fapp-installation-wizard","docs\u002F99.examples\u002F20.app-installation-wizard","Многошаговый процесс установки, который создаёт пользовательские поля, регистрирует placement-ы, финализирует установку и празднует конфетти.",{"title":405,"path":406,"stem":407,"restApiVersion":15,"category":362,"description":408,"badge":15},"Автоматизация задач","\u002Fdocs\u002Fexamples\u002Ftask-automation","docs\u002F99.examples\u002F3.task-automation","Опрашивает стадии сделок каждые 60 с. При отслеживаемом переходе создаёт задачу с описанием, дедлайном и приоритетом.",{"title":410,"path":411,"stem":412,"restApiVersion":15,"category":362,"description":413,"badge":15},"Вебхук CLI","\u002Fdocs\u002Fexamples\u002Fwebhook-cli-node","docs\u002F99.examples\u002F3.webhook-cli-node","Node-скрипт на 30 строк, который аутентифицируется на портале Bitrix24 через входящий вебхук и печатает вызывающего пользователя — полезно как первое, что вы запускаете после создания вебхука.",{"title":415,"path":416,"stem":417,"restApiVersion":15,"category":15,"description":418,"badge":15},"Экспорт Node + Hook","\u002Fdocs\u002Fexamples\u002Fnode-hook-company-export","docs\u002F99.examples\u002F30.node-hook-company-export","Экспорт компаний Bitrix24 в CSV-файл из чистого Node.js-скрипта через B24Hook.",{"title":420,"path":421,"stem":422,"restApiVersion":15,"category":362,"description":423,"badge":15},"Массовое обновление","\u002Fdocs\u002Fexamples\u002Fbulk-update-deals","docs\u002F99.examples\u002F4.bulk-update-deals","Переносит тысячи сделок CRM на новую стадию через BatchByChunkV2 — автоматическое разбиение на чанки, обработка частичных ошибок и одна строка прогресса.",{"title":425,"path":426,"stem":427,"restApiVersion":15,"category":362,"description":428,"badge":15},"Синхронизация ERP","\u002Fdocs\u002Fexamples\u002Ferp-sync","docs\u002F99.examples\u002F4.erp-sync","Двусторонняя синхронизация контактов между Bitrix24 и внешней ERP. Сопоставление по ИНН (основное) или email (запасное). Cron каждый час.",{"title":430,"path":431,"stem":432,"restApiVersion":15,"category":362,"description":433,"badge":15},"Файлы Диска","\u002Fdocs\u002Fexamples\u002Fdisk-files","docs\u002F99.examples\u002F5.disk-files","Список хранилищ и содержимого папок, создание подпапок, просмотр файлов. Загрузка файлов (multipart) намеренно вне области.",{"title":435,"path":436,"stem":437,"restApiVersion":15,"category":362,"description":438,"badge":15},"Подписка на Pull","\u002Fdocs\u002Fexamples\u002Fpull-subscribe-frame","docs\u002F99.examples\u002F5.pull-subscribe-frame","Открыть живой канал из frame-приложения Bitrix24 и реагировать на push-события через useB24Helper + Pull-клиент.",{"title":440,"path":441,"stem":442,"restApiVersion":15,"category":362,"description":443,"badge":15},"Telegram-бот","\u002Fdocs\u002Fexamples\u002Ftelegram-bot","docs\u002F99.examples\u002F6.telegram-bot","Опрашивает новые сделки CRM каждые две минуты; уведомляет Telegram-чат HTML-карточкой.",{"title":445,"path":446,"stem":447,"restApiVersion":15,"category":362,"description":448,"badge":15},"Обработчик вебхуков","\u002Fdocs\u002Fexamples\u002Fwebhook-handler","docs\u002F99.examples\u002F7.webhook-handler","Express-сервер, который принимает исходящие события Bitrix24, подгружает детали через REST, маршрутизирует по имени события. Всегда возвращает 200.",{"title":450,"path":451,"stem":452,"restApiVersion":15,"category":362,"description":453,"badge":15},"AI-ассистент","\u002Fdocs\u002Fexamples\u002Fai-assistant","docs\u002F99.examples\u002F8.ai-assistant","Загружает сделку и её дела, спрашивает у GPT-4o лучшее следующее действие, создаёт задачу, привязанную к сделке, с приоритетом и дедлайном.",{"title":455,"path":456,"stem":457,"restApiVersion":15,"category":362,"description":458,"badge":15},"Веб-поиск + LLM","\u002Fdocs\u002Fexamples\u002Fweb-search-llm","docs\u002F99.examples\u002F9.web-search-llm","Двухшаговый RAG: запрос к любому провайдеру веб-поиска, прогон результата через ваш LLM с цитатами [N], публикация ответа комментарием в таймлайн CRM на сделке.",{"id":460,"title":246,"audited":461,"badge":15,"body":462,"category":249,"description":250,"extension":3128,"links":3129,"meta":3139,"navigation":3140,"path":247,"restApiVersion":15,"seo":3141,"stem":248,"__hash__":3142},"docs\u002Fdocs\u002F2.working-with-the-rest-api\u002F66.logger.md","2026-06-09",{"type":463,"value":464,"toc":3110},"minimark",[465,472,477,489,684,689,1030,1034,1040,1180,1186,1553,1559,1647,1653,1676,1682,1705,1709,1715,1720,1823,1829,1833,1839,1991,1995,1998,2003,2019,2024,2113,2117,2123,2129,2154,2160,2204,2210,2224,2228,2234,2240,2246,2252,2359,2370,2380,2386,2396,2400,2404,2565,2569,2764,2768,2771,2871,2875,2919,2923,2928,2942,2947,2963,2967,2970,3106],[466,467,468],"warning",{},[469,470,471],"p",{},"Мы всё ещё дорабатываем эту страницу. Некоторых данных здесь может не хватать — скоро дополним.",[473,474,476],"h2",{"id":475},"logging-levels","Уровни логирования",[469,478,479,480,484,485,488],{},"Уровни логирования расположены по возрастанию серьёзности — от ",[481,482,483],"strong",{},"детальной отладки"," (0) до ",[481,486,487],{},"критических сбоев"," (7).\nФильтрация работает по включающему принципу: когда задан определённый уровень, логируются сообщения этого уровня и всех более высоких.",[490,491,492,511],"table",{},[493,494,495],"thead",{},[496,497,498,502,505,508],"tr",{},[499,500,501],"th",{},"Уровень",[499,503,504],{},"Значение",[499,506,507],{},"Когда использовать",[499,509,510],{},"Практический пример",[512,513,514,540,561,582,603,624,645,663],"tbody",{},[496,515,516,522,525,534],{},[517,518,519],"td",{},[481,520,521],{},"DEBUG",[517,523,524],{},"0",[517,526,527,528,531],{},"Детальная отладочная информация для разработчиков",[529,530],"br",{},[481,532,533],{},"По умолчанию в development",[517,535,536],{},[537,538,539],"code",{},"Loaded 1523 records in 45ms",[496,541,542,547,550,556],{},[517,543,544],{},[481,545,546],{},"INFO",[517,548,549],{},"1",[517,551,552,553,555],{},"Информация о нормальной работе приложения",[529,554],{},"Отслеживание бизнес-логики",[517,557,558],{},[537,559,560],{},"User #123 added item to cart",[496,562,563,568,571,577],{},[517,564,565],{},[481,566,567],{},"NOTICE",[517,569,570],{},"2",[517,572,573,574,576],{},"Важные, но некритичные события",[529,575],{},"Успешные операции с последствиями",[517,578,579],{},[537,580,581],{},"System settings changed by administrator",[496,583,584,589,592,598],{},[517,585,586],{},[481,587,588],{},"WARNING",[517,590,591],{},"3",[517,593,594,595,597],{},"Потенциальные проблемы",[529,596],{},"Приложение работает, но требует внимания",[517,599,600],{},[537,601,602],{},"Cache almost full (95%)",[496,604,605,610,613,619],{},[517,606,607],{},[481,608,609],{},"ERROR",[517,611,612],{},"4",[517,614,615,616,618],{},"Ошибки времени выполнения, требующие вмешательства",[529,617],{},"Часть функциональности недоступна",[517,620,621],{},[537,622,623],{},"Failed to connect to database",[496,625,626,631,634,640],{},[517,627,628],{},[481,629,630],{},"CRITICAL",[517,632,633],{},"5",[517,635,636,637,639],{},"Критические сбои компонентов",[529,638],{},"Требуют срочного вмешательства в рабочее время",[517,641,642],{},[537,643,644],{},"Payment gateway unavailable for more than 5 minutes",[496,646,647,652,655,658],{},[517,648,649],{},[481,650,651],{},"ALERT",[517,653,654],{},"6",[517,656,657],{},"Серьёзные проблемы, требующие немедленного решения",[517,659,660],{},[537,661,662],{},"Disk space exhausted at 99%",[496,664,665,670,673,679],{},[517,666,667],{},[481,668,669],{},"EMERGENCY",[517,671,672],{},"7",[517,674,675,676,678],{},"Система неработоспособна",[529,677],{},"Наивысший уровень срочности",[517,680,681],{},[537,682,683],{},"Server farm completely unavailable",[685,686,688],"h3",{"id":687},"how-level-filtering-works","Как работает фильтрация по уровням",[690,691,696],"pre",{"className":692,"code":693,"language":694,"meta":695,"style":695},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Logger, ConsoleHandler, LogLevel } from '@bitrix24\u002Fb24jssdk'\n\n\u002F\u002F Пример 1: уровень ERROR\nconst $logger = new Logger('app');\n$logger.pushHandler(new ConsoleHandler(LogLevel.ERROR));\n\n\u002F\u002F Эти логи БУДУТ выведены:\n$logger.error('Loading error', {}); \u002F\u002F ✓ уровень 4 >= 4\n$logger.critical('Critical error'); \u002F\u002F ✓ уровень 5 >= 4\n$logger.alert('Alert'); \u002F\u002F ✓ уровень 6 >= 4\n$logger.emergency('Emergency'); \u002F\u002F ✓ уровень 7 >= 4\n\n\u002F\u002F Эти логи НЕ будут выведены:\n$logger.debug('Debug'); \u002F\u002F ✗ уровень 0 \u003C 4\n$logger.info('Info'); \u002F\u002F ✗ уровень 1 \u003C 4\n$logger.warning('Warning'); \u002F\u002F ✗ уровень 3 \u003C 4\n","ts","",[537,697,698,742,749,756,792,821,826,832,864,890,916,942,947,953,979,1005],{"__ignoreMap":695},[699,700,703,707,711,715,718,721,723,726,729,732,735,739],"span",{"class":701,"line":702},"line",1,[699,704,706],{"class":705},"s7zQu","import",[699,708,710],{"class":709},"sMK4o"," {",[699,712,714],{"class":713},"sTEyZ"," Logger",[699,716,717],{"class":709},",",[699,719,720],{"class":713}," ConsoleHandler",[699,722,717],{"class":709},[699,724,725],{"class":713}," LogLevel",[699,727,728],{"class":709}," }",[699,730,731],{"class":705}," from",[699,733,734],{"class":709}," '",[699,736,738],{"class":737},"sfazB","@bitrix24\u002Fb24jssdk",[699,740,741],{"class":709},"'\n",[699,743,745],{"class":701,"line":744},2,[699,746,748],{"emptyLinePlaceholder":747},true,"\n",[699,750,752],{"class":701,"line":751},3,[699,753,755],{"class":754},"sHwdD","\u002F\u002F Пример 1: уровень ERROR\n",[699,757,759,763,766,769,772,775,778,781,784,786,789],{"class":701,"line":758},4,[699,760,762],{"class":761},"spNyl","const",[699,764,765],{"class":713}," $logger ",[699,767,768],{"class":709},"=",[699,770,771],{"class":709}," new",[699,773,714],{"class":774},"s2Zo4",[699,776,777],{"class":713},"(",[699,779,780],{"class":709},"'",[699,782,783],{"class":737},"app",[699,785,780],{"class":709},[699,787,788],{"class":713},")",[699,790,791],{"class":709},";\n",[699,793,795,798,801,804,806,809,811,814,816,819],{"class":701,"line":794},5,[699,796,797],{"class":713},"$logger",[699,799,800],{"class":709},".",[699,802,803],{"class":774},"pushHandler",[699,805,777],{"class":713},[699,807,808],{"class":709},"new",[699,810,720],{"class":774},[699,812,813],{"class":713},"(LogLevel",[699,815,800],{"class":709},[699,817,818],{"class":713},"ERROR))",[699,820,791],{"class":709},[699,822,824],{"class":701,"line":823},6,[699,825,748],{"emptyLinePlaceholder":747},[699,827,829],{"class":701,"line":828},7,[699,830,831],{"class":754},"\u002F\u002F Эти логи БУДУТ выведены:\n",[699,833,835,837,839,842,844,846,849,851,853,856,858,861],{"class":701,"line":834},8,[699,836,797],{"class":713},[699,838,800],{"class":709},[699,840,841],{"class":774},"error",[699,843,777],{"class":713},[699,845,780],{"class":709},[699,847,848],{"class":737},"Loading error",[699,850,780],{"class":709},[699,852,717],{"class":709},[699,854,855],{"class":709}," {}",[699,857,788],{"class":713},[699,859,860],{"class":709},";",[699,862,863],{"class":754}," \u002F\u002F ✓ уровень 4 >= 4\n",[699,865,867,869,871,874,876,878,881,883,885,887],{"class":701,"line":866},9,[699,868,797],{"class":713},[699,870,800],{"class":709},[699,872,873],{"class":774},"critical",[699,875,777],{"class":713},[699,877,780],{"class":709},[699,879,880],{"class":737},"Critical error",[699,882,780],{"class":709},[699,884,788],{"class":713},[699,886,860],{"class":709},[699,888,889],{"class":754}," \u002F\u002F ✓ уровень 5 >= 4\n",[699,891,893,895,897,900,902,904,907,909,911,913],{"class":701,"line":892},10,[699,894,797],{"class":713},[699,896,800],{"class":709},[699,898,899],{"class":774},"alert",[699,901,777],{"class":713},[699,903,780],{"class":709},[699,905,906],{"class":737},"Alert",[699,908,780],{"class":709},[699,910,788],{"class":713},[699,912,860],{"class":709},[699,914,915],{"class":754}," \u002F\u002F ✓ уровень 6 >= 4\n",[699,917,919,921,923,926,928,930,933,935,937,939],{"class":701,"line":918},11,[699,920,797],{"class":713},[699,922,800],{"class":709},[699,924,925],{"class":774},"emergency",[699,927,777],{"class":713},[699,929,780],{"class":709},[699,931,932],{"class":737},"Emergency",[699,934,780],{"class":709},[699,936,788],{"class":713},[699,938,860],{"class":709},[699,940,941],{"class":754}," \u002F\u002F ✓ уровень 7 >= 4\n",[699,943,945],{"class":701,"line":944},12,[699,946,748],{"emptyLinePlaceholder":747},[699,948,950],{"class":701,"line":949},13,[699,951,952],{"class":754},"\u002F\u002F Эти логи НЕ будут выведены:\n",[699,954,956,958,960,963,965,967,970,972,974,976],{"class":701,"line":955},14,[699,957,797],{"class":713},[699,959,800],{"class":709},[699,961,962],{"class":774},"debug",[699,964,777],{"class":713},[699,966,780],{"class":709},[699,968,969],{"class":737},"Debug",[699,971,780],{"class":709},[699,973,788],{"class":713},[699,975,860],{"class":709},[699,977,978],{"class":754}," \u002F\u002F ✗ уровень 0 \u003C 4\n",[699,980,982,984,986,989,991,993,996,998,1000,1002],{"class":701,"line":981},15,[699,983,797],{"class":713},[699,985,800],{"class":709},[699,987,988],{"class":774},"info",[699,990,777],{"class":713},[699,992,780],{"class":709},[699,994,995],{"class":737},"Info",[699,997,780],{"class":709},[699,999,788],{"class":713},[699,1001,860],{"class":709},[699,1003,1004],{"class":754}," \u002F\u002F ✗ уровень 1 \u003C 4\n",[699,1006,1008,1010,1012,1014,1016,1018,1021,1023,1025,1027],{"class":701,"line":1007},16,[699,1009,797],{"class":713},[699,1011,800],{"class":709},[699,1013,466],{"class":774},[699,1015,777],{"class":713},[699,1017,780],{"class":709},[699,1019,1020],{"class":737},"Warning",[699,1022,780],{"class":709},[699,1024,788],{"class":713},[699,1026,860],{"class":709},[699,1028,1029],{"class":754}," \u002F\u002F ✗ уровень 3 \u003C 4\n",[473,1031,1033],{"id":1032},"main-types-and-interfaces","Основные типы и интерфейсы",[469,1035,1036,1039],{},[481,1037,1038],{},"LogRecord","\nСтруктура записи лога:",[690,1041,1045],{"className":1042,"code":1043,"language":1044,"meta":695,"style":695},"language-ts-type shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  channel: string,              \u002F\u002F Имя канала логгера\n  level: LogLevel,              \u002F\u002F Числовой уровень\n  levelName: LogLevelName,      \u002F\u002F Имя уровня (например, 'DEBUG')\n  message: string,              \u002F\u002F Текст сообщения\n  context: Record\u003Cstring, any>, \u002F\u002F Контекстные данные\n  extra: Record\u003Cstring, any>,   \u002F\u002F Дополнительные данные (добавляются процессорами)\n  timestamp: Date               \u002F\u002F Временная метка\n}\n","ts-type",[537,1046,1047,1052,1070,1084,1099,1113,1140,1162,1175],{"__ignoreMap":695},[699,1048,1049],{"class":701,"line":702},[699,1050,1051],{"class":709},"{\n",[699,1053,1054,1058,1061,1065,1067],{"class":701,"line":744},[699,1055,1057],{"class":1056},"swJcz","  channel",[699,1059,1060],{"class":709},":",[699,1062,1064],{"class":1063},"sBMFI"," string",[699,1066,717],{"class":709},[699,1068,1069],{"class":754},"              \u002F\u002F Имя канала логгера\n",[699,1071,1072,1075,1077,1079,1081],{"class":701,"line":751},[699,1073,1074],{"class":1056},"  level",[699,1076,1060],{"class":709},[699,1078,725],{"class":1063},[699,1080,717],{"class":709},[699,1082,1083],{"class":754},"              \u002F\u002F Числовой уровень\n",[699,1085,1086,1089,1091,1094,1096],{"class":701,"line":758},[699,1087,1088],{"class":1056},"  levelName",[699,1090,1060],{"class":709},[699,1092,1093],{"class":1063}," LogLevelName",[699,1095,717],{"class":709},[699,1097,1098],{"class":754},"      \u002F\u002F Имя уровня (например, 'DEBUG')\n",[699,1100,1101,1104,1106,1108,1110],{"class":701,"line":794},[699,1102,1103],{"class":1056},"  message",[699,1105,1060],{"class":709},[699,1107,1064],{"class":1063},[699,1109,717],{"class":709},[699,1111,1112],{"class":754},"              \u002F\u002F Текст сообщения\n",[699,1114,1115,1118,1120,1123,1126,1129,1131,1134,1137],{"class":701,"line":823},[699,1116,1117],{"class":1056},"  context",[699,1119,1060],{"class":709},[699,1121,1122],{"class":1063}," Record",[699,1124,1125],{"class":709},"\u003C",[699,1127,1128],{"class":1063},"string",[699,1130,717],{"class":709},[699,1132,1133],{"class":1063}," any",[699,1135,1136],{"class":709},">,",[699,1138,1139],{"class":754}," \u002F\u002F Контекстные данные\n",[699,1141,1142,1145,1147,1149,1151,1153,1155,1157,1159],{"class":701,"line":828},[699,1143,1144],{"class":1056},"  extra",[699,1146,1060],{"class":709},[699,1148,1122],{"class":1063},[699,1150,1125],{"class":709},[699,1152,1128],{"class":1063},[699,1154,717],{"class":709},[699,1156,1133],{"class":1063},[699,1158,1136],{"class":709},[699,1160,1161],{"class":754},"   \u002F\u002F Дополнительные данные (добавляются процессорами)\n",[699,1163,1164,1167,1169,1172],{"class":701,"line":834},[699,1165,1166],{"class":1056},"  timestamp",[699,1168,1060],{"class":709},[699,1170,1171],{"class":1063}," Date",[699,1173,1174],{"class":754},"               \u002F\u002F Временная метка\n",[699,1176,1177],{"class":701,"line":866},[699,1178,1179],{"class":709},"}\n",[469,1181,1182,1185],{},[481,1183,1184],{},"LoggerInterface","\nОсновной интерфейс логгера:",[690,1187,1189],{"className":1042,"code":1188,"language":1044,"meta":695,"style":695},"log(level: LogLevel, message: string, context?: Record\u003Cstring, any>): Promise\u003Cvoid>\ndebug(message: string, context?: Record\u003Cstring, any>): Promise\u003Cvoid>\ninfo(message: string, context?: Record\u003Cstring, any>): Promise\u003Cvoid>\nnotice(message: string, context?: Record\u003Cstring, any>): Promise\u003Cvoid>\nwarning(message: string, context?: Record\u003Cstring, any>): Promise\u003Cvoid>\nerror(message: string, context?: Record\u003Cstring, any>): Promise\u003Cvoid>\ncritical(message: string, context?: Record\u003Cstring, any>): Promise\u003Cvoid>\nalert(message: string, context?: Record\u003Cstring, any>): Promise\u003Cvoid>\nemergency(message: string, context?: Record\u003Cstring, any>): Promise\u003Cvoid>\n",[537,1190,1191,1247,1286,1324,1363,1401,1439,1477,1515],{"__ignoreMap":695},[699,1192,1193,1196,1198,1202,1204,1206,1208,1211,1213,1215,1217,1220,1223,1225,1227,1229,1231,1233,1236,1239,1241,1244],{"class":701,"line":702},[699,1194,1195],{"class":1063},"log",[699,1197,777],{"class":709},[699,1199,1201],{"class":1200},"sHdIc","level",[699,1203,1060],{"class":709},[699,1205,725],{"class":1063},[699,1207,717],{"class":709},[699,1209,1210],{"class":1200}," message",[699,1212,1060],{"class":709},[699,1214,1064],{"class":1063},[699,1216,717],{"class":709},[699,1218,1219],{"class":1200}," context",[699,1221,1222],{"class":709},"?:",[699,1224,1122],{"class":1063},[699,1226,1125],{"class":709},[699,1228,1128],{"class":1063},[699,1230,717],{"class":709},[699,1232,1133],{"class":1063},[699,1234,1235],{"class":709},">):",[699,1237,1238],{"class":1063}," Promise",[699,1240,1125],{"class":709},[699,1242,1243],{"class":1063},"void",[699,1245,1246],{"class":709},">\n",[699,1248,1249,1251,1253,1256,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276,1278,1280,1282,1284],{"class":701,"line":744},[699,1250,962],{"class":1063},[699,1252,777],{"class":709},[699,1254,1255],{"class":1200},"message",[699,1257,1060],{"class":709},[699,1259,1064],{"class":1063},[699,1261,717],{"class":709},[699,1263,1219],{"class":1200},[699,1265,1222],{"class":709},[699,1267,1122],{"class":1063},[699,1269,1125],{"class":709},[699,1271,1128],{"class":1063},[699,1273,717],{"class":709},[699,1275,1133],{"class":1063},[699,1277,1235],{"class":709},[699,1279,1238],{"class":1063},[699,1281,1125],{"class":709},[699,1283,1243],{"class":1063},[699,1285,1246],{"class":709},[699,1287,1288,1290,1292,1294,1296,1298,1300,1302,1304,1306,1308,1310,1312,1314,1316,1318,1320,1322],{"class":701,"line":751},[699,1289,988],{"class":1063},[699,1291,777],{"class":709},[699,1293,1255],{"class":1200},[699,1295,1060],{"class":709},[699,1297,1064],{"class":1063},[699,1299,717],{"class":709},[699,1301,1219],{"class":1200},[699,1303,1222],{"class":709},[699,1305,1122],{"class":1063},[699,1307,1125],{"class":709},[699,1309,1128],{"class":1063},[699,1311,717],{"class":709},[699,1313,1133],{"class":1063},[699,1315,1235],{"class":709},[699,1317,1238],{"class":1063},[699,1319,1125],{"class":709},[699,1321,1243],{"class":1063},[699,1323,1246],{"class":709},[699,1325,1326,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361],{"class":701,"line":758},[699,1327,1328],{"class":1063},"notice",[699,1330,777],{"class":709},[699,1332,1255],{"class":1200},[699,1334,1060],{"class":709},[699,1336,1064],{"class":1063},[699,1338,717],{"class":709},[699,1340,1219],{"class":1200},[699,1342,1222],{"class":709},[699,1344,1122],{"class":1063},[699,1346,1125],{"class":709},[699,1348,1128],{"class":1063},[699,1350,717],{"class":709},[699,1352,1133],{"class":1063},[699,1354,1235],{"class":709},[699,1356,1238],{"class":1063},[699,1358,1125],{"class":709},[699,1360,1243],{"class":1063},[699,1362,1246],{"class":709},[699,1364,1365,1367,1369,1371,1373,1375,1377,1379,1381,1383,1385,1387,1389,1391,1393,1395,1397,1399],{"class":701,"line":794},[699,1366,466],{"class":1063},[699,1368,777],{"class":709},[699,1370,1255],{"class":1200},[699,1372,1060],{"class":709},[699,1374,1064],{"class":1063},[699,1376,717],{"class":709},[699,1378,1219],{"class":1200},[699,1380,1222],{"class":709},[699,1382,1122],{"class":1063},[699,1384,1125],{"class":709},[699,1386,1128],{"class":1063},[699,1388,717],{"class":709},[699,1390,1133],{"class":1063},[699,1392,1235],{"class":709},[699,1394,1238],{"class":1063},[699,1396,1125],{"class":709},[699,1398,1243],{"class":1063},[699,1400,1246],{"class":709},[699,1402,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425,1427,1429,1431,1433,1435,1437],{"class":701,"line":823},[699,1404,841],{"class":1063},[699,1406,777],{"class":709},[699,1408,1255],{"class":1200},[699,1410,1060],{"class":709},[699,1412,1064],{"class":1063},[699,1414,717],{"class":709},[699,1416,1219],{"class":1200},[699,1418,1222],{"class":709},[699,1420,1122],{"class":1063},[699,1422,1125],{"class":709},[699,1424,1128],{"class":1063},[699,1426,717],{"class":709},[699,1428,1133],{"class":1063},[699,1430,1235],{"class":709},[699,1432,1238],{"class":1063},[699,1434,1125],{"class":709},[699,1436,1243],{"class":1063},[699,1438,1246],{"class":709},[699,1440,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459,1461,1463,1465,1467,1469,1471,1473,1475],{"class":701,"line":828},[699,1442,873],{"class":1063},[699,1444,777],{"class":709},[699,1446,1255],{"class":1200},[699,1448,1060],{"class":709},[699,1450,1064],{"class":1063},[699,1452,717],{"class":709},[699,1454,1219],{"class":1200},[699,1456,1222],{"class":709},[699,1458,1122],{"class":1063},[699,1460,1125],{"class":709},[699,1462,1128],{"class":1063},[699,1464,717],{"class":709},[699,1466,1133],{"class":1063},[699,1468,1235],{"class":709},[699,1470,1238],{"class":1063},[699,1472,1125],{"class":709},[699,1474,1243],{"class":1063},[699,1476,1246],{"class":709},[699,1478,1479,1481,1483,1485,1487,1489,1491,1493,1495,1497,1499,1501,1503,1505,1507,1509,1511,1513],{"class":701,"line":834},[699,1480,899],{"class":1063},[699,1482,777],{"class":709},[699,1484,1255],{"class":1200},[699,1486,1060],{"class":709},[699,1488,1064],{"class":1063},[699,1490,717],{"class":709},[699,1492,1219],{"class":1200},[699,1494,1222],{"class":709},[699,1496,1122],{"class":1063},[699,1498,1125],{"class":709},[699,1500,1128],{"class":1063},[699,1502,717],{"class":709},[699,1504,1133],{"class":1063},[699,1506,1235],{"class":709},[699,1508,1238],{"class":1063},[699,1510,1125],{"class":709},[699,1512,1243],{"class":1063},[699,1514,1246],{"class":709},[699,1516,1517,1519,1521,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551],{"class":701,"line":866},[699,1518,925],{"class":1063},[699,1520,777],{"class":709},[699,1522,1255],{"class":1200},[699,1524,1060],{"class":709},[699,1526,1064],{"class":1063},[699,1528,717],{"class":709},[699,1530,1219],{"class":1200},[699,1532,1222],{"class":709},[699,1534,1122],{"class":1063},[699,1536,1125],{"class":709},[699,1538,1128],{"class":1063},[699,1540,717],{"class":709},[699,1542,1133],{"class":1063},[699,1544,1235],{"class":709},[699,1546,1238],{"class":1063},[699,1548,1125],{"class":709},[699,1550,1243],{"class":1063},[699,1552,1246],{"class":709},[469,1554,1555,1558],{},[481,1556,1557],{},"Handler","\nОбработчик лога:",[690,1560,1562],{"className":1042,"code":1561,"language":1044,"meta":695,"style":695},"handle(record: LogRecord): Promise\u003Cboolean>  \u002F\u002F Обработать запись\nisHandling(level: LogLevel): boolean         \u002F\u002F Проверить поддержку уровня\nshouldBubble(): boolean                      \u002F\u002F Продолжать ли цепочку\nsetFormatter(formatter: Formatter): void     \u002F\u002F Установить форматтер\ngetFormatter(): Formatter | null             \u002F\u002F Получить форматтер\n",[537,1563,1564,1595,1606,1617,1630],{"__ignoreMap":695},[699,1565,1566,1569,1571,1574,1576,1579,1582,1584,1586,1589,1592],{"class":701,"line":702},[699,1567,1568],{"class":1063},"handle",[699,1570,777],{"class":709},[699,1572,1573],{"class":1200},"record",[699,1575,1060],{"class":709},[699,1577,1578],{"class":1063}," LogRecord",[699,1580,1581],{"class":709},"):",[699,1583,1238],{"class":1063},[699,1585,1125],{"class":709},[699,1587,1588],{"class":1063},"boolean",[699,1590,1591],{"class":709},">",[699,1593,1594],{"class":754},"  \u002F\u002F Обработать запись\n",[699,1596,1597,1600,1603],{"class":701,"line":744},[699,1598,1599],{"class":774},"isHandling",[699,1601,1602],{"class":713},"(level: LogLevel): boolean         ",[699,1604,1605],{"class":754},"\u002F\u002F Проверить поддержку уровня\n",[699,1607,1608,1611,1614],{"class":701,"line":751},[699,1609,1610],{"class":774},"shouldBubble",[699,1612,1613],{"class":713},"(): boolean                      ",[699,1615,1616],{"class":754},"\u002F\u002F Продолжать ли цепочку\n",[699,1618,1619,1622,1625,1627],{"class":701,"line":758},[699,1620,1621],{"class":774},"setFormatter",[699,1623,1624],{"class":713},"(formatter: Formatter): ",[699,1626,1243],{"class":709},[699,1628,1629],{"class":754},"     \u002F\u002F Установить форматтер\n",[699,1631,1632,1635,1638,1641,1644],{"class":701,"line":794},[699,1633,1634],{"class":774},"getFormatter",[699,1636,1637],{"class":713},"(): Formatter ",[699,1639,1640],{"class":709},"|",[699,1642,1643],{"class":709}," null",[699,1645,1646],{"class":754},"             \u002F\u002F Получить форматтер\n",[469,1648,1649,1652],{},[481,1650,1651],{},"Formatter"," для преобразования LogRecord:",[690,1654,1656],{"className":1042,"code":1655,"language":1044,"meta":695,"style":695},"format(record: LogRecord): any\n",[537,1657,1658],{"__ignoreMap":695},[699,1659,1660,1663,1665,1667,1669,1671,1673],{"class":701,"line":702},[699,1661,1662],{"class":1063},"format",[699,1664,777],{"class":709},[699,1666,1573],{"class":1200},[699,1668,1060],{"class":709},[699,1670,1578],{"class":1063},[699,1672,1581],{"class":709},[699,1674,1675],{"class":1063}," any\n",[469,1677,1678,1681],{},[481,1679,1680],{},"Processor"," для модификации LogRecord:",[690,1683,1685],{"className":1042,"code":1684,"language":1044,"meta":695,"style":695},"(record: LogRecord) => LogRecord\n",[537,1686,1687],{"__ignoreMap":695},[699,1688,1689,1691,1693,1695,1697,1699,1702],{"class":701,"line":702},[699,1690,777],{"class":709},[699,1692,1573],{"class":1200},[699,1694,1060],{"class":709},[699,1696,1578],{"class":1063},[699,1698,788],{"class":709},[699,1700,1701],{"class":761}," =>",[699,1703,1704],{"class":1063}," LogRecord\n",[473,1706,1708],{"id":1707},"main-classes","Основные классы",[469,1710,1711,1714],{},[481,1712,1713],{},"AbstractLogger","\nАбстрактный базовый класс, реализующий удобные методы (debug, info и т.д.).",[469,1716,1717,1719],{},[481,1718,246],{},"\nОсновная реализация логгера:",[690,1721,1723],{"className":1042,"code":1722,"language":1044,"meta":695,"style":695},"constructor(channel: string)                 \u002F\u002F Создать логгер с указанным каналом\npushHandler(handler: Handler): this          \u002F\u002F Добавить обработчик\npopHandler(): Handler | null                 \u002F\u002F Удалить последний обработчик\nsetHandlers(handlers: Handler[]): this       \u002F\u002F Задать список обработчиков\npushProcessor(processor: Processor): this    \u002F\u002F Добавить процессор\nlog(level, message, context): Promise\u003Cvoid>  \u002F\u002F Основной метод логирования\n",[537,1724,1725,1744,1757,1772,1785,1798],{"__ignoreMap":695},[699,1726,1727,1730,1732,1735,1737,1739,1741],{"class":701,"line":702},[699,1728,1729],{"class":1063},"constructor",[699,1731,777],{"class":709},[699,1733,1734],{"class":1200},"channel",[699,1736,1060],{"class":709},[699,1738,1064],{"class":1063},[699,1740,788],{"class":709},[699,1742,1743],{"class":754},"                 \u002F\u002F Создать логгер с указанным каналом\n",[699,1745,1746,1748,1751,1754],{"class":701,"line":744},[699,1747,803],{"class":774},[699,1749,1750],{"class":713},"(handler: Handler): ",[699,1752,1753],{"class":709},"this",[699,1755,1756],{"class":754},"          \u002F\u002F Добавить обработчик\n",[699,1758,1759,1762,1765,1767,1769],{"class":701,"line":751},[699,1760,1761],{"class":774},"popHandler",[699,1763,1764],{"class":713},"(): Handler ",[699,1766,1640],{"class":709},[699,1768,1643],{"class":709},[699,1770,1771],{"class":754},"                 \u002F\u002F Удалить последний обработчик\n",[699,1773,1774,1777,1780,1782],{"class":701,"line":758},[699,1775,1776],{"class":774},"setHandlers",[699,1778,1779],{"class":713},"(handlers: Handler[]): ",[699,1781,1753],{"class":709},[699,1783,1784],{"class":754},"       \u002F\u002F Задать список обработчиков\n",[699,1786,1787,1790,1793,1795],{"class":701,"line":794},[699,1788,1789],{"class":774},"pushProcessor",[699,1791,1792],{"class":713},"(processor: Processor): ",[699,1794,1753],{"class":709},[699,1796,1797],{"class":754},"    \u002F\u002F Добавить процессор\n",[699,1799,1800,1802,1805,1807,1809,1811,1814,1817,1820],{"class":701,"line":823},[699,1801,1195],{"class":774},[699,1803,1804],{"class":713},"(level",[699,1806,717],{"class":709},[699,1808,1210],{"class":713},[699,1810,717],{"class":709},[699,1812,1813],{"class":713}," context): ",[699,1815,1816],{"class":1063},"Promise",[699,1818,1819],{"class":709},"\u003Cvoid>",[699,1821,1822],{"class":754},"  \u002F\u002F Основной метод логирования\n",[469,1824,1825,1828],{},[481,1826,1827],{},"NullLogger","\nЗаглушка для случаев, когда логирование не требуется. Не выполняет операций.",[473,1830,1832],{"id":1831},"logger-factory","Фабрика логгеров",[469,1834,1835,1838],{},[481,1836,1837],{},"LoggerFactory","\nСтатические методы для создания логгеров:",[690,1840,1842],{"className":1042,"code":1841,"language":1044,"meta":695,"style":695},"createNullLogger(): LoggerInterface\ncreateForBrowser(channel: string, isDevMode: boolean = false): LoggerInterface\ncreateForBrowserDevelopment(channel: string, level: LogLevel = LogLevel.DEBUG): LoggerInterface\ncreateForBrowserProduction(channel: string, level: LogLevel = LogLevel.ERROR): LoggerInterface\nforcedLog(logger, action, message, context): Promise\u003Cvoid>  \u002F\u002F Принудительное логирование\n",[537,1843,1844,1855,1889,1923,1956],{"__ignoreMap":695},[699,1845,1846,1849,1852],{"class":701,"line":702},[699,1847,1848],{"class":1063},"createNullLogger",[699,1850,1851],{"class":709},"():",[699,1853,1854],{"class":1063}," LoggerInterface\n",[699,1856,1857,1860,1862,1864,1866,1868,1870,1873,1875,1878,1881,1885,1887],{"class":701,"line":744},[699,1858,1859],{"class":1063},"createForBrowser",[699,1861,777],{"class":709},[699,1863,1734],{"class":1200},[699,1865,1060],{"class":709},[699,1867,1064],{"class":1063},[699,1869,717],{"class":709},[699,1871,1872],{"class":1200}," isDevMode",[699,1874,1060],{"class":709},[699,1876,1877],{"class":1063}," boolean",[699,1879,1880],{"class":709}," =",[699,1882,1884],{"class":1883},"sfNiH"," false",[699,1886,1581],{"class":709},[699,1888,1854],{"class":1063},[699,1890,1891,1894,1896,1898,1900,1902,1904,1907,1909,1911,1913,1915,1917,1919,1921],{"class":701,"line":751},[699,1892,1893],{"class":1063},"createForBrowserDevelopment",[699,1895,777],{"class":709},[699,1897,1734],{"class":1200},[699,1899,1060],{"class":709},[699,1901,1064],{"class":1063},[699,1903,717],{"class":709},[699,1905,1906],{"class":1200}," level",[699,1908,1060],{"class":709},[699,1910,725],{"class":1063},[699,1912,1880],{"class":709},[699,1914,725],{"class":713},[699,1916,800],{"class":709},[699,1918,521],{"class":713},[699,1920,1581],{"class":709},[699,1922,1854],{"class":1063},[699,1924,1925,1928,1930,1932,1934,1936,1938,1940,1942,1944,1946,1948,1950,1952,1954],{"class":701,"line":758},[699,1926,1927],{"class":1063},"createForBrowserProduction",[699,1929,777],{"class":709},[699,1931,1734],{"class":1200},[699,1933,1060],{"class":709},[699,1935,1064],{"class":1063},[699,1937,717],{"class":709},[699,1939,1906],{"class":1200},[699,1941,1060],{"class":709},[699,1943,725],{"class":1063},[699,1945,1880],{"class":709},[699,1947,725],{"class":713},[699,1949,800],{"class":709},[699,1951,609],{"class":713},[699,1953,1581],{"class":709},[699,1955,1854],{"class":1063},[699,1957,1958,1961,1963,1965,1967,1970,1972,1974,1976,1978,1980,1982,1984,1986,1988],{"class":701,"line":794},[699,1959,1960],{"class":1063},"forcedLog",[699,1962,777],{"class":709},[699,1964,249],{"class":1200},[699,1966,717],{"class":709},[699,1968,1969],{"class":1200}," action",[699,1971,717],{"class":709},[699,1973,1210],{"class":1200},[699,1975,717],{"class":709},[699,1977,1219],{"class":1200},[699,1979,1581],{"class":709},[699,1981,1238],{"class":1063},[699,1983,1125],{"class":709},[699,1985,1243],{"class":1063},[699,1987,1591],{"class":709},[699,1989,1990],{"class":754},"  \u002F\u002F Принудительное логирование\n",[473,1992,1994],{"id":1993},"processors","Процессоры",[469,1996,1997],{},"Процессоры модифицируют записи лога перед обработкой:",[469,1999,2000],{},[481,2001,2002],{},"Встроенные процессоры:",[2004,2005,2006,2013],"ul",{},[2007,2008,2009,2012],"li",{},[537,2010,2011],{},"memoryUsageProcessor"," — добавляет использование памяти",[2007,2014,2015,2018],{},[537,2016,2017],{},"pidProcessor"," — добавляет ID процесса",[469,2020,2021],{},[481,2022,2023],{},"Создание своего процессора:",[690,2025,2027],{"className":692,"code":2026,"language":694,"meta":695,"style":695},"import { Processor } from '@bitrix24\u002Fb24jssdk'\n\nconst customProcessor: Processor = (record) => {\n  record.extra.customField = 'value'\n  return record\n}\n",[537,2028,2029,2048,2052,2077,2101,2109],{"__ignoreMap":695},[699,2030,2031,2033,2035,2038,2040,2042,2044,2046],{"class":701,"line":702},[699,2032,706],{"class":705},[699,2034,710],{"class":709},[699,2036,2037],{"class":713}," Processor",[699,2039,728],{"class":709},[699,2041,731],{"class":705},[699,2043,734],{"class":709},[699,2045,738],{"class":737},[699,2047,741],{"class":709},[699,2049,2050],{"class":701,"line":744},[699,2051,748],{"emptyLinePlaceholder":747},[699,2053,2054,2056,2059,2061,2063,2065,2068,2070,2072,2074],{"class":701,"line":751},[699,2055,762],{"class":761},[699,2057,2058],{"class":713}," customProcessor",[699,2060,1060],{"class":709},[699,2062,2037],{"class":1063},[699,2064,1880],{"class":709},[699,2066,2067],{"class":709}," (",[699,2069,1573],{"class":1200},[699,2071,788],{"class":709},[699,2073,1701],{"class":761},[699,2075,2076],{"class":709}," {\n",[699,2078,2079,2082,2084,2087,2089,2092,2094,2096,2099],{"class":701,"line":758},[699,2080,2081],{"class":713},"  record",[699,2083,800],{"class":709},[699,2085,2086],{"class":713},"extra",[699,2088,800],{"class":709},[699,2090,2091],{"class":713},"customField",[699,2093,1880],{"class":709},[699,2095,734],{"class":709},[699,2097,2098],{"class":737},"value",[699,2100,741],{"class":709},[699,2102,2103,2106],{"class":701,"line":794},[699,2104,2105],{"class":705},"  return",[699,2107,2108],{"class":713}," record\n",[699,2110,2111],{"class":701,"line":823},[699,2112,1179],{"class":709},[473,2114,2116],{"id":2115},"formatters","Форматтеры",[469,2118,2119,2122],{},[481,2120,2121],{},"AbstractFormatter","\nБазовый класс форматтера с поддержкой форматирования дат.",[469,2124,2125,2128],{},[481,2126,2127],{},"LineFormatter","\nФорматирует логи в строку с поддержкой шаблонов:",[690,2130,2132],{"className":1042,"code":2131,"language":1044,"meta":695,"style":695},"\u002F\u002F По умолчанию: '[{channel}] {levelName}: {message} {context} {extra} {date}'\nnew LineFormatter(formatString, dateFormat)\n",[537,2133,2134,2139],{"__ignoreMap":695},[699,2135,2136],{"class":701,"line":702},[699,2137,2138],{"class":754},"\u002F\u002F По умолчанию: '[{channel}] {levelName}: {message} {context} {extra} {date}'\n",[699,2140,2141,2143,2146,2149,2151],{"class":701,"line":744},[699,2142,808],{"class":709},[699,2144,2145],{"class":774}," LineFormatter",[699,2147,2148],{"class":713},"(formatString",[699,2150,717],{"class":709},[699,2152,2153],{"class":713}," dateFormat)\n",[469,2155,2156],{},[2157,2158,2159],"em",{},"Доступные плейсхолдеры:",[2004,2161,2162,2168,2174,2180,2186,2192,2198],{},[2007,2163,2164,2167],{},[537,2165,2166],{},"{channel}"," — имя канала",[2007,2169,2170,2173],{},[537,2171,2172],{},"{levelName}"," — имя уровня",[2007,2175,2176,2179],{},[537,2177,2178],{},"{message}"," — сообщение",[2007,2181,2182,2185],{},[537,2183,2184],{},"{context}"," — контекст в JSON",[2007,2187,2188,2191],{},[537,2189,2190],{},"{extra}"," — дополнительные данные в JSON",[2007,2193,2194,2197],{},[537,2195,2196],{},"{timestamp}"," — unix-таймстамп",[2007,2199,2200,2203],{},[537,2201,2202],{},"{date}"," — дата в заданном формате",[469,2205,2206,2209],{},[481,2207,2208],{},"JsonFormatter:"," Форматирует логи в JSON-строку.",[469,2211,2212,2215,2216,2223],{},[481,2213,2214],{},"TelegramFormatter:"," Форматирует запись лога для ",[2217,2218,2222],"a",{"href":2219,"rel":2220},"https:\u002F\u002Fcore.telegram.org\u002Fbots\u002Fapi#html-style",[2221],"nofollow","отправки в Telegram",". Поддерживает HTML-разметку с экранированными спецсимволами.",[473,2225,2227],{"id":2226},"handlers","Обработчики",[469,2229,2230,2233],{},[481,2231,2232],{},"AbstractHandler","\nБазовый класс обработчика с поддержкой уровня логирования и всплытия.",[469,2235,2236,2239],{},[481,2237,2238],{},"ConsoleHandler","\nВыводит логи в консоль браузера с поддержкой стилизации для разных уровней.",[469,2241,2242,2245],{},[481,2243,2244],{},"ConsoleV2Handler","\nУлучшенная версия ConsoleHandler с более читаемым выводом.",[469,2247,2248,2251],{},[481,2249,2250],{},"MemoryHandler","\nХранит логи в памяти (полезно для тестирования и отладки):",[690,2253,2255],{"className":692,"code":2254,"language":694,"meta":695,"style":695},"import { MemoryHandler, LogLevel } from '@bitrix24\u002Fb24jssdk'\n\nconst handler = new MemoryHandler(LogLevel.DEBUG, { limit: 1000 })\nconst records = handler.getRecords() \u002F\u002F Получить все записи\nhandler.clear() \u002F\u002F Очистить записи\n",[537,2256,2257,2280,2284,2321,2344],{"__ignoreMap":695},[699,2258,2259,2261,2263,2266,2268,2270,2272,2274,2276,2278],{"class":701,"line":702},[699,2260,706],{"class":705},[699,2262,710],{"class":709},[699,2264,2265],{"class":713}," MemoryHandler",[699,2267,717],{"class":709},[699,2269,725],{"class":713},[699,2271,728],{"class":709},[699,2273,731],{"class":705},[699,2275,734],{"class":709},[699,2277,738],{"class":737},[699,2279,741],{"class":709},[699,2281,2282],{"class":701,"line":744},[699,2283,748],{"emptyLinePlaceholder":747},[699,2285,2286,2288,2291,2293,2295,2297,2299,2301,2303,2305,2307,2310,2312,2316,2318],{"class":701,"line":751},[699,2287,762],{"class":761},[699,2289,2290],{"class":713}," handler ",[699,2292,768],{"class":709},[699,2294,771],{"class":709},[699,2296,2265],{"class":774},[699,2298,813],{"class":713},[699,2300,800],{"class":709},[699,2302,521],{"class":713},[699,2304,717],{"class":709},[699,2306,710],{"class":709},[699,2308,2309],{"class":1056}," limit",[699,2311,1060],{"class":709},[699,2313,2315],{"class":2314},"sbssI"," 1000",[699,2317,728],{"class":709},[699,2319,2320],{"class":713},")\n",[699,2322,2323,2325,2328,2330,2333,2335,2338,2341],{"class":701,"line":758},[699,2324,762],{"class":761},[699,2326,2327],{"class":713}," records ",[699,2329,768],{"class":709},[699,2331,2332],{"class":713}," handler",[699,2334,800],{"class":709},[699,2336,2337],{"class":774},"getRecords",[699,2339,2340],{"class":713},"() ",[699,2342,2343],{"class":754},"\u002F\u002F Получить все записи\n",[699,2345,2346,2349,2351,2354,2356],{"class":701,"line":794},[699,2347,2348],{"class":713},"handler",[699,2350,800],{"class":709},[699,2352,2353],{"class":774},"clear",[699,2355,2340],{"class":713},[699,2357,2358],{"class":754},"\u002F\u002F Очистить записи\n",[469,2360,2361,2364,2365,800],{},[481,2362,2363],{},"ConsolaAdapter","\nАдаптер для ",[2217,2366,2369],{"href":2367,"rel":2368},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fconsola",[2221],"Consola",[469,2371,2372,2364,2375,800],{},[481,2373,2374],{},"WinstonAdapter",[2217,2376,2379],{"href":2377,"rel":2378},"https:\u002F\u002Fgithub.com\u002Fwinstonjs\u002Fwinston",[2221],"Winston",[469,2381,2382,2385],{},[481,2383,2384],{},"StreamHandler","\nОбработчик потоков Node.js для записи логов в потоки.",[469,2387,2388,2391,2395],{},[481,2389,2390],{},"TelegramHandler",[2217,2392,2394],{"href":2393},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger-telegram\u002F","Отправляет логи"," в Telegram-чат. В браузере выводит предупреждение в консоль. На сервере отправляет сообщение через Telegram Bot API.",[473,2397,2399],{"id":2398},"usage","Использование",[685,2401,2403],{"id":2402},"basic-example","Базовый пример",[690,2405,2407],{"className":692,"code":2406,"language":694,"meta":695,"style":695},"import { LoggerFactory } from '@bitrix24\u002Fb24jssdk'\n\nconst devMode = !!(typeof import.meta !== 'undefined' && (import.meta.dev || import.meta.env?.DEV))\nconst $logger = LoggerFactory.createForBrowser('Example:getCrmItem', devMode)\n$logger.info('User logged in', { userId: 123 })\n",[537,2408,2409,2428,2432,2504,2532],{"__ignoreMap":695},[699,2410,2411,2413,2415,2418,2420,2422,2424,2426],{"class":701,"line":702},[699,2412,706],{"class":705},[699,2414,710],{"class":709},[699,2416,2417],{"class":713}," LoggerFactory",[699,2419,728],{"class":709},[699,2421,731],{"class":705},[699,2423,734],{"class":709},[699,2425,738],{"class":737},[699,2427,741],{"class":709},[699,2429,2430],{"class":701,"line":744},[699,2431,748],{"emptyLinePlaceholder":747},[699,2433,2434,2436,2439,2441,2444,2446,2449,2452,2454,2457,2460,2462,2465,2467,2470,2472,2474,2476,2479,2481,2484,2487,2489,2491,2493,2495,2498,2501],{"class":701,"line":751},[699,2435,762],{"class":761},[699,2437,2438],{"class":713}," devMode ",[699,2440,768],{"class":709},[699,2442,2443],{"class":709}," !!",[699,2445,777],{"class":713},[699,2447,2448],{"class":709},"typeof",[699,2450,2451],{"class":705}," import",[699,2453,800],{"class":709},[699,2455,2456],{"class":713},"meta ",[699,2458,2459],{"class":709},"!==",[699,2461,734],{"class":709},[699,2463,2464],{"class":737},"undefined",[699,2466,780],{"class":709},[699,2468,2469],{"class":709}," &&",[699,2471,2067],{"class":713},[699,2473,706],{"class":705},[699,2475,800],{"class":709},[699,2477,2478],{"class":713},"meta",[699,2480,800],{"class":709},[699,2482,2483],{"class":713},"dev ",[699,2485,2486],{"class":709},"||",[699,2488,2451],{"class":705},[699,2490,800],{"class":709},[699,2492,2478],{"class":713},[699,2494,800],{"class":709},[699,2496,2497],{"class":713},"env",[699,2499,2500],{"class":709},"?.",[699,2502,2503],{"class":713},"DEV))\n",[699,2505,2506,2508,2510,2512,2514,2516,2518,2520,2522,2525,2527,2529],{"class":701,"line":758},[699,2507,762],{"class":761},[699,2509,765],{"class":713},[699,2511,768],{"class":709},[699,2513,2417],{"class":713},[699,2515,800],{"class":709},[699,2517,1859],{"class":774},[699,2519,777],{"class":713},[699,2521,780],{"class":709},[699,2523,2524],{"class":737},"Example:getCrmItem",[699,2526,780],{"class":709},[699,2528,717],{"class":709},[699,2530,2531],{"class":713}," devMode)\n",[699,2533,2534,2536,2538,2540,2542,2544,2547,2549,2551,2553,2556,2558,2561,2563],{"class":701,"line":794},[699,2535,797],{"class":713},[699,2537,800],{"class":709},[699,2539,988],{"class":774},[699,2541,777],{"class":713},[699,2543,780],{"class":709},[699,2545,2546],{"class":737},"User logged in",[699,2548,780],{"class":709},[699,2550,717],{"class":709},[699,2552,710],{"class":709},[699,2554,2555],{"class":1056}," userId",[699,2557,1060],{"class":709},[699,2559,2560],{"class":2314}," 123",[699,2562,728],{"class":709},[699,2564,2320],{"class":713},[685,2566,2568],{"id":2567},"advanced-configuration","Расширенная конфигурация",[690,2570,2572],{"className":692,"code":2571,"language":694,"meta":695,"style":695},"import { Logger, ConsoleV2Handler, LineFormatter, LogLevel, memoryUsageProcessor, pidProcessor } from '@bitrix24\u002Fb24jssdk'\n\nconst $logger = new Logger('app')\nconst handler = new ConsoleV2Handler(LogLevel.DEBUG)\nhandler.setFormatter(new LineFormatter('[{levelName}] {message}'))\n\n$logger\n  .pushHandler(handler)\n  .pushProcessor(memoryUsageProcessor)\n  .pushProcessor(pidProcessor)\n\n$logger.warning('Low memory', { freeMemory: '10MB' })\n",[537,2573,2574,2615,2619,2641,2660,2686,2690,2695,2705,2714,2723,2727],{"__ignoreMap":695},[699,2575,2576,2578,2580,2582,2584,2587,2589,2591,2593,2595,2597,2600,2602,2605,2607,2609,2611,2613],{"class":701,"line":702},[699,2577,706],{"class":705},[699,2579,710],{"class":709},[699,2581,714],{"class":713},[699,2583,717],{"class":709},[699,2585,2586],{"class":713}," ConsoleV2Handler",[699,2588,717],{"class":709},[699,2590,2145],{"class":713},[699,2592,717],{"class":709},[699,2594,725],{"class":713},[699,2596,717],{"class":709},[699,2598,2599],{"class":713}," memoryUsageProcessor",[699,2601,717],{"class":709},[699,2603,2604],{"class":713}," pidProcessor",[699,2606,728],{"class":709},[699,2608,731],{"class":705},[699,2610,734],{"class":709},[699,2612,738],{"class":737},[699,2614,741],{"class":709},[699,2616,2617],{"class":701,"line":744},[699,2618,748],{"emptyLinePlaceholder":747},[699,2620,2621,2623,2625,2627,2629,2631,2633,2635,2637,2639],{"class":701,"line":751},[699,2622,762],{"class":761},[699,2624,765],{"class":713},[699,2626,768],{"class":709},[699,2628,771],{"class":709},[699,2630,714],{"class":774},[699,2632,777],{"class":713},[699,2634,780],{"class":709},[699,2636,783],{"class":737},[699,2638,780],{"class":709},[699,2640,2320],{"class":713},[699,2642,2643,2645,2647,2649,2651,2653,2655,2657],{"class":701,"line":758},[699,2644,762],{"class":761},[699,2646,2290],{"class":713},[699,2648,768],{"class":709},[699,2650,771],{"class":709},[699,2652,2586],{"class":774},[699,2654,813],{"class":713},[699,2656,800],{"class":709},[699,2658,2659],{"class":713},"DEBUG)\n",[699,2661,2662,2664,2666,2668,2670,2672,2674,2676,2678,2681,2683],{"class":701,"line":794},[699,2663,2348],{"class":713},[699,2665,800],{"class":709},[699,2667,1621],{"class":774},[699,2669,777],{"class":713},[699,2671,808],{"class":709},[699,2673,2145],{"class":774},[699,2675,777],{"class":713},[699,2677,780],{"class":709},[699,2679,2680],{"class":737},"[{levelName}] {message}",[699,2682,780],{"class":709},[699,2684,2685],{"class":713},"))\n",[699,2687,2688],{"class":701,"line":823},[699,2689,748],{"emptyLinePlaceholder":747},[699,2691,2692],{"class":701,"line":828},[699,2693,2694],{"class":713},"$logger\n",[699,2696,2697,2700,2702],{"class":701,"line":834},[699,2698,2699],{"class":709},"  .",[699,2701,803],{"class":774},[699,2703,2704],{"class":713},"(handler)\n",[699,2706,2707,2709,2711],{"class":701,"line":866},[699,2708,2699],{"class":709},[699,2710,1789],{"class":774},[699,2712,2713],{"class":713},"(memoryUsageProcessor)\n",[699,2715,2716,2718,2720],{"class":701,"line":892},[699,2717,2699],{"class":709},[699,2719,1789],{"class":774},[699,2721,2722],{"class":713},"(pidProcessor)\n",[699,2724,2725],{"class":701,"line":918},[699,2726,748],{"emptyLinePlaceholder":747},[699,2728,2729,2731,2733,2735,2737,2739,2742,2744,2746,2748,2751,2753,2755,2758,2760,2762],{"class":701,"line":944},[699,2730,797],{"class":713},[699,2732,800],{"class":709},[699,2734,466],{"class":774},[699,2736,777],{"class":713},[699,2738,780],{"class":709},[699,2740,2741],{"class":737},"Low memory",[699,2743,780],{"class":709},[699,2745,717],{"class":709},[699,2747,710],{"class":709},[699,2749,2750],{"class":1056}," freeMemory",[699,2752,1060],{"class":709},[699,2754,734],{"class":709},[699,2756,2757],{"class":737},"10MB",[699,2759,780],{"class":709},[699,2761,728],{"class":709},[699,2763,2320],{"class":713},[685,2765,2767],{"id":2766},"creating-a-custom-handler","Создание своего обработчика",[469,2769,2770],{},"\u002F\u002F @check-ignore: AbstractHandler is not re-exported from the SDK main index",[690,2772,2774],{"className":692,"code":2773,"language":694,"meta":695,"style":695},"import { AbstractHandler, LogRecord } from '@bitrix24\u002Fb24jssdk'\n\nclass CustomHandler extends AbstractHandler {\n  async handle(record: LogRecord): Promise\u003Cboolean> {\n    \u002F\u002F Отправить на сервер, записать в файл и т.д.\n    return true \u002F\u002F Возвращает true, если запись обработана\n  }\n}\n",[537,2775,2776,2799,2803,2818,2846,2851,2862,2867],{"__ignoreMap":695},[699,2777,2778,2780,2782,2785,2787,2789,2791,2793,2795,2797],{"class":701,"line":702},[699,2779,706],{"class":705},[699,2781,710],{"class":709},[699,2783,2784],{"class":713}," AbstractHandler",[699,2786,717],{"class":709},[699,2788,1578],{"class":713},[699,2790,728],{"class":709},[699,2792,731],{"class":705},[699,2794,734],{"class":709},[699,2796,738],{"class":737},[699,2798,741],{"class":709},[699,2800,2801],{"class":701,"line":744},[699,2802,748],{"emptyLinePlaceholder":747},[699,2804,2805,2808,2811,2814,2816],{"class":701,"line":751},[699,2806,2807],{"class":761},"class",[699,2809,2810],{"class":1063}," CustomHandler",[699,2812,2813],{"class":761}," extends",[699,2815,2784],{"class":1063},[699,2817,2076],{"class":709},[699,2819,2820,2823,2826,2828,2830,2832,2834,2836,2838,2840,2842,2844],{"class":701,"line":758},[699,2821,2822],{"class":761},"  async",[699,2824,2825],{"class":1056}," handle",[699,2827,777],{"class":709},[699,2829,1573],{"class":1200},[699,2831,1060],{"class":709},[699,2833,1578],{"class":1063},[699,2835,1581],{"class":709},[699,2837,1238],{"class":1063},[699,2839,1125],{"class":709},[699,2841,1588],{"class":1063},[699,2843,1591],{"class":709},[699,2845,2076],{"class":709},[699,2847,2848],{"class":701,"line":794},[699,2849,2850],{"class":754},"    \u002F\u002F Отправить на сервер, записать в файл и т.д.\n",[699,2852,2853,2856,2859],{"class":701,"line":823},[699,2854,2855],{"class":705},"    return",[699,2857,2858],{"class":1883}," true",[699,2860,2861],{"class":754}," \u002F\u002F Возвращает true, если запись обработана\n",[699,2863,2864],{"class":701,"line":828},[699,2865,2866],{"class":709},"  }\n",[699,2868,2869],{"class":701,"line":834},[699,2870,1179],{"class":709},[473,2872,2874],{"id":2873},"features","Возможности",[2876,2877,2878,2884,2890,2904,2910],"ol",{},[2007,2879,2880,2883],{},[481,2881,2882],{},"Асинхронность",": все методы логирования возвращают Promise.",[2007,2885,2886,2889],{},[481,2887,2888],{},"Цепочка ответственности",": обработчики вызываются последовательно.",[2007,2891,2892,2895,2896,2899,2900,2903],{},[481,2893,2894],{},"Всплытие",": если обработчик возвращает ",[537,2897,2898],{},"true"," и ",[537,2901,2902],{},"shouldBubble() === false",", цепочка прерывается.",[2007,2905,2906,2909],{},[481,2907,2908],{},"Каналы",": логи группируются по каналам для фильтрации.",[2007,2911,2912,2915,2916,800],{},[481,2913,2914],{},"Контекст",": поддержка структурированных данных через параметр ",[537,2917,2918],{},"context",[473,2920,2922],{"id":2921},"usage-recommendations","Рекомендации по использованию",[469,2924,2925],{},[481,2926,2927],{},"Development",[2004,2929,2930,2939],{},[2007,2931,2932,2933,2936,2937],{},"Используйте ",[537,2934,2935],{},"LoggerFactory.createForBrowserDevelopment"," с уровнем ",[537,2938,521],{},[2007,2940,2941],{},"Добавляйте процессоры для отладочной информации",[469,2943,2944],{},[481,2945,2946],{},"Production",[2004,2948,2949,2957,2960],{},[2007,2950,2932,2951,2936,2954,2956],{},[537,2952,2953],{},"LoggerFactory.createForBrowserProduction",[537,2955,609],{}," или выше",[2007,2958,2959],{},"Ограничивайте число обработчиков ради производительности",[2007,2961,2962],{},"Рассмотрите создание своих обработчиков для отправки логов на сервер",[469,2964,2965],{},[481,2966,2914],{},[469,2968,2969],{},"\u002F\u002F @check-ignore: illustrative snippet — orderId, userId, error are not declared",[690,2971,2973],{"className":692,"code":2972,"language":694,"meta":695,"style":695},"\u002F\u002F Хорошо:\n$logger.error('Failed to process order', {\n  orderId: 123,\n  userId: 456,\n  error: error.message\n})\n\n\u002F\u002F Плохо:\n$logger.error(`Failed to process order ${orderId} for user ${userId}: ${error.message}`)\n",[537,2974,2975,2980,3001,3013,3025,3040,3047,3051,3056],{"__ignoreMap":695},[699,2976,2977],{"class":701,"line":702},[699,2978,2979],{"class":754},"\u002F\u002F Хорошо:\n",[699,2981,2982,2984,2986,2988,2990,2992,2995,2997,2999],{"class":701,"line":744},[699,2983,797],{"class":713},[699,2985,800],{"class":709},[699,2987,841],{"class":774},[699,2989,777],{"class":713},[699,2991,780],{"class":709},[699,2993,2994],{"class":737},"Failed to process order",[699,2996,780],{"class":709},[699,2998,717],{"class":709},[699,3000,2076],{"class":709},[699,3002,3003,3006,3008,3010],{"class":701,"line":751},[699,3004,3005],{"class":1056},"  orderId",[699,3007,1060],{"class":709},[699,3009,2560],{"class":2314},[699,3011,3012],{"class":709},",\n",[699,3014,3015,3018,3020,3023],{"class":701,"line":758},[699,3016,3017],{"class":1056},"  userId",[699,3019,1060],{"class":709},[699,3021,3022],{"class":2314}," 456",[699,3024,3012],{"class":709},[699,3026,3027,3030,3032,3035,3037],{"class":701,"line":794},[699,3028,3029],{"class":1056},"  error",[699,3031,1060],{"class":709},[699,3033,3034],{"class":713}," error",[699,3036,800],{"class":709},[699,3038,3039],{"class":713},"message\n",[699,3041,3042,3045],{"class":701,"line":823},[699,3043,3044],{"class":709},"}",[699,3046,2320],{"class":713},[699,3048,3049],{"class":701,"line":828},[699,3050,748],{"emptyLinePlaceholder":747},[699,3052,3053],{"class":701,"line":834},[699,3054,3055],{"class":754},"\u002F\u002F Плохо:\n",[699,3057,3058,3060,3062,3064,3066,3069,3072,3075,3078,3080,3083,3085,3088,3090,3093,3095,3097,3099,3101,3104],{"class":701,"line":866},[699,3059,797],{"class":713},[699,3061,800],{"class":709},[699,3063,841],{"class":774},[699,3065,777],{"class":713},[699,3067,3068],{"class":709},"`",[699,3070,3071],{"class":737},"Failed to process order ",[699,3073,3074],{"class":709},"${",[699,3076,3077],{"class":713},"orderId",[699,3079,3044],{"class":709},[699,3081,3082],{"class":737}," for user ",[699,3084,3074],{"class":709},[699,3086,3087],{"class":713},"userId",[699,3089,3044],{"class":709},[699,3091,3092],{"class":737},": ",[699,3094,3074],{"class":709},[699,3096,841],{"class":713},[699,3098,800],{"class":709},[699,3100,1255],{"class":713},[699,3102,3103],{"class":709},"}`",[699,3105,2320],{"class":713},[3107,3108,3109],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":695,"searchDepth":744,"depth":744,"links":3111},[3112,3115,3116,3117,3118,3119,3120,3121,3126,3127],{"id":475,"depth":744,"text":476,"children":3113},[3114],{"id":687,"depth":751,"text":688},{"id":1032,"depth":744,"text":1033},{"id":1707,"depth":744,"text":1708},{"id":1831,"depth":744,"text":1832},{"id":1993,"depth":744,"text":1994},{"id":2115,"depth":744,"text":2116},{"id":2226,"depth":744,"text":2227},{"id":2398,"depth":744,"text":2399,"children":3122},[3123,3124,3125],{"id":2402,"depth":751,"text":2403},{"id":2567,"depth":751,"text":2568},{"id":2766,"depth":751,"text":2767},{"id":2873,"depth":744,"text":2874},{"id":2921,"depth":744,"text":2922},"md",[3130,3133,3136],{"label":246,"iconName":3131,"to":3132},"GitHubIcon","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Ftree\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Flogger",{"label":3134,"iconName":3131,"to":3135},"Типы для Logger","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Ftree\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Ftypes\u002Flogger.ts",{"label":3137,"iconName":3131,"to":3138},"Monolog","https:\u002F\u002Fgithub.com\u002FSeldaek\u002Fmonolog",{},{"title":246},{"title":246,"description":250},"awlYfxLAjrzSTyN121PKo7ImoNTQd_cw6ZUoEkHiRhg",{"data":3144,"body":3145},{},{"type":3146,"children":3147},"root",[3148],{"type":3149,"tag":469,"props":3150,"children":3151},"element",{},[3152],{"type":3153,"value":250},"text",1783080225057]