Плагины позволяют изменить данные ошибки перед отправкой, исключить ненужные события или отследить срабатывание ограничения частоты отправки.
Механизм плагинов поддерживает следующие хуки:
| Хук | Предназначение |
|---|---|
errorOnThrottle | Позволяет отследить троттлинг ошибок при работе с модулем Error. Подробнее здесь |
errorBeforeAdd | Позволяет модифицировать данные ошибки до её отправки в сервис. Подробнее здесь |
Для начала установите SDK – введите в терминале команду:
npm install @apptracer/sdk --save
Плагины можно подключить при инициализации SDK через initTracerPlugins или позже, во время работы приложения, через addTracerPlugin.
initTracerPlugins подключает плагины при инициализации SDK. Они сохраняются на всё время работы, в том числе после отключения и возобновления модулей. Во время паузы обработка ошибок не выполняется.
| Параметр | Тип | Описание |
|---|---|---|
name | string | Название инстанса SDK. Только в Lite-версии. |
config | ITracerPluginsConfig | Настройки подключаемых плагинов. |
initTracerPlugins возвращает объект ITracerPlugins. Его метод addPlugin позволяет подключить ещё один плагин во время работы приложения. Вместо него также можно использовать функцию addTracerPlugin:
| Параметр | Тип | Описание |
|---|---|---|
plugin | ITracerPlugin | Настройки одного подключаемого плагина. |
Пример подключения:
import { initTracerPlugins } from '@apptracer/sdk'; const config = { plugins: [{ name: 'checkout', errorBeforeAdd: function () { return { keys: { feature: 'checkout' } }; }, }], }; initTracerPlugins(config);
| Параметр | Тип | Описание |
|---|---|---|
plugins | ITracerPlugin[] | Список настроек подключаемых плагинов. |
| Параметр | Тип | Описание |
|---|---|---|
name | string | Название плагина. |
errorOnThrottle | (errorInfo: ITracerErrorInfo) => void | Хук для работы с троттлингом ошибок. |
errorBeforeAdd | (errorInfo: ITracerErrorInfo) => ITracerErrorData | boolean | void | Хук для модификации ошибок перед отправкой. |
addTracerPlugin подключает плагин во время работы приложения и возвращает функцию, с помощью которой его можно удалить:
| Параметр | Тип | Описание |
|---|---|---|
name | string | Имя экземпляра SDK, только для Lite. |
plugin | ITracerPlugin | Настройки подключаемого плагина. |
Пример подключения:
import { addTracerPlugin } from '@apptracer/sdk'; // SDK проинициализирован, выполняется код const dispose = addTracerPlugin({ name: 'warnings', errorBeforeAdd: function (info) { if (info.error.message.indexOf('optional feature') !== -1) { return { severity: 'warning' }; } }, }); // Когда плагин больше не нужен: dispose();
JS SDK использует троттлинг, чтобы избежать в сервисе появления большого количества одинаковых ошибок. Функция, которую вы определите в errorOnThrottle, будет вызвана для каждой ошибки, попавшей под троттлинг – таким образом вы можете его отследить.
SDK позволяет отправить до 10 одинаковых ошибок подряд. Если ошибки продолжают повторяться, отправляется не более одной ошибки раз в 10 секунд.
В errorBeforeAdd можно изменить данные ошибки перед отправкой: например, добавить ключи или задать уровень серьёзности. Верните объект с изменениями или false, чтобы исключить ошибку из отправки. Имена плагинов, изменивших ошибку, доступны в поле modifiedByPlugins.
Сначала SDK проверяет ограничение частоты отправки. Если оно сработало, вызывается только errorOnThrottle, а дальнейшая обработка ошибки прекращается. В остальных случаях SDK вызывает filterError, а затем — errorBeforeAdd, если фильтр не вернул false.
Плагины вызываются в порядке регистрации. Изменения, возвращённые одним плагином, доступны следующему; false прекращает обработку ошибки и вызов следующих плагинов. Возвращённые keys дополняют или переопределяют ключи события, а context заменяется целиком.
errorInfo.context содержит JSON-копию контекста события. Чтобы заменить отправляемый контекст, верните { context: новыйОбъект }, а чтобы удалить — { context: undefined }. Изменение самого errorInfo.context не меняет данные события.
Пример использования:
import { addTracerPlugin } from '@apptracer/sdk'; addTracerPlugin({ name: 'warnings', errorBeforeAdd: (errorInfo) => { if (errorInfo.errorStack.includes('some_text')) { return { severity: 'warning', keys: { withSomeText: true }, }; } } });
addPlugin, как и addTracerPlugin, возвращает функцию удаления добавленного плагина. Для добавления плагинов после инициализации используйте эти методы, не вызывая initTracerPlugins повторно.