Событие exception — одна пойманная ошибка. Это единственный тип, который группируется: каждое исключение получает отпечаток, и исключения с одинаковым отпечатком сводятся в один инцидент — то, что разбирают, назначают, решают и передают Autofix.
Откуда берётся
captureException(error)— вы сами сообщаете о пойманной ошибке.captureMessage(message)— событие без стека с именемMessage, для того, что заслуживает инцидента, но не являетсяError.- Автоматический перехват: GlobalErrorIntegration (Browser) и UncaughtExceptionIntegration (Node) для необработанных ошибок и отклонённых промисов.
- BrowserApiErrorsIntegration — ошибки внутри колбэков таймеров и обработчиков событий с исходным стеком. (HttpErrors, ResourceErrors и SlowHandler отправляют не исключения, а логи.)
Использование — на странице Ошибки.
Payload
json
{
"type": "exception",
"timestamp": "2026-09-24T10:15:02.481Z",
"tags": {},
"contexts": { "environment": "production", "release": "web@1.4.2", "replay.id": "…" },
"payload": {
"name": "TypeError",
"message": "Cannot read properties of undefined (reading 'total')",
"stack": "TypeError: Cannot read properties of undefined…\n at checkout (app.js:1:4821)",
"breadcrumbs": [
{
"type": "ui.click",
"level": "info",
"message": "Clicked \"Pay\" button",
"data": { "selector": "button#pay" },
"timestamp": "2026-09-24T10:15:01.902Z"
}
]
}
}| Поле | Тип | Описание |
|---|---|---|
name | string | Имя класса ошибки — error.name (TypeError, ApiError, …). |
message | string | error.message. |
stack | string, необязательно | Исходный error.stack. Минифицированные кадры раскодируются через загруженные source maps — при просмотре и перед группировкой. |
platform | string, необязательно | Язык SDK — javascript, php, … ([a-z0-9_-], до 32 символов). Отсутствие означает javascript. |
frames | array, необязательно | Стек в виде структурированных кадров, начиная с места выброса. Если есть, он главный источник для стека и группировки, а stack — только читаемый текст. JS SDK вместо него отправляют stack. |
chain | array, необязательно | Причины, начиная с внешней (error.cause, getPrevious() в PHP): каждая — {name, message, frames?}, а для JavaScript — {name, message, stack}, текст которого разбирается в кадры при приёме. Не больше 10. JS SDK заполняют его из error.cause. |
exception_group | array, необязательно | Остальные члены группы исключений (ExceptionGroup в Python, AggregateError в JS), в той же форме, что chain. Показываются на странице события, в группировке не участвуют. Не больше 10. JS SDK заполняют его из AggregateError.errors. |
message_template | string, необязательно | Сообщение до подстановки параметров (Payment for %s declined). Без пригодного стека группировка идёт по нему вместо сообщения. captureMessage() отправляет его для сообщения, записанного через fmt. |
debug_ids | object, необязательно | {файл: Debug ID} для файлов бандла из стека, как их называют кадры, — см. Debug ID. Только JavaScript; не больше 100 элементов, всё, что не UUID, игнорируется. Как есть не хранится: каждый кадр перечисленного файла получает id, а текст stack для этого разбирается во frames. |
fingerprint | array of strings, необязательно | Переопределяет группировку — см. Группировка из кода. До 10 строк по 200 символов; {{ default }} означает группировку проекта. |
breadcrumbs | array | След событий перед ошибкой — последние 50 хлебных крошек, записанных на клиенте. |
Кроме этого, у события-исключения может быть ещё одно поле верхнего уровня, рядом с type и timestamp: event_id — собственный id события в SDK, UUID. Его возвращает captureException() и показывает lastEventId(); сервер хранит его как contexts['client.event_id'] рядом со своим id, а event_id: в поиске находит событие по любому из них. Всё, что не UUID, игнорируется.
Все поля кадра необязательны, так что любой язык заполняет то, что у него есть:
| Поле | Описание |
|---|---|
function | Имя функции или метода, без класса. |
module | Класс / модуль / пакет, к которому относится. |
file | Путь для показа — для вашего кода путь внутри репозитория. |
abs_path | Абсолютный путь на машине, где произошла ошибка. |
line, column | С 1; column опускается, если в языке его нет. |
in_app | true для кода вашего приложения, false для зависимостей и рантайма. Группировка использует только кадры приложения, если они есть, а панель сворачивает остальные. Для JavaScript stack вычисляется на сервере (node_modules, внутренности node: и расширения браузера к приложению не относятся). |
context | {pre, line, post} — строки кода вокруг line, не больше 10 с каждой стороны. Показываются раскрытыми на странице инцидента. |
vars | Локальные переменные кадра, {имя: значение} — не больше 50; вложенные значения хранятся как JSON, строки обрезаются до 1024 символов. Очищаются как контексты (переменная password станет [Filtered]), показываются вместе с кадром, в группировке не участвуют. |
Ничто в payload исключения не приводит к отклонению события: некорректные frames или chain отбрасываются, неизвестные ключи кадра игнорируются, у стека длиннее 200 кадров остаются 100 внутренних и 100 внешних, а name / message обрезаются до 255 символов.
У каждой хлебной крошки есть message, type (например, ui.click, navigation, http, по умолчанию debug), level (log, debug, info, success, warn, error), необязательный произвольный объект data и timestamp. См. Хлебные крошки.
Группировка в инциденты
При приёме отпечаток исключения вычисляется по шаблону отпечатка проекта (Настройки → Группировка). По умолчанию {{event.default}} группирует по типу ошибки и кадрам приложения после source maps, а без пригодного стека — по типу и сообщению с заменёнными числами, id и датами, — см. Инциденты. Шаблон может ссылаться на любое поле события, включая теги и контексты ({{event.tags.checkout.step}}, {{event.contexts.browser.name}}) и кадры ({{event.frames.0.function}}, {{event.frames_signature}}) — полный список и рецепты см. в Инцидентах.
Вторая настройка на той же вкладке решает, создаёт ли исключение инцидент вообще (по умолчанию — каждое). В любом случае само исключение сохраняется, а если у него есть контекст release, оно учитывается в этом релизе.
Фильтры
Помимо фильтров, через которые проходит любой тип, исключения отбрасываются переключателями в Настройки → Фильтры:
- Фильтровать ошибки гидратации — рассинхронизация SSR-гидратации во фреймворках (
hydration,hydrating,Text content does not match server-rendered HTMLв имени или сообщении). - Фильтровать ошибки загрузки чанков —
ChunkLoadError,Loading chunk,Loading CSS chunk,Failed to fetch dynamically imported module(Chrome),error loading dynamically imported module(Firefox),Importing a module script failed(Safari).
Отбросить по имени или сообщению можно выражением фильтра, например "{{event.name}}" === "AbortError" или "{{event.message}}" ~ "ResizeObserver" — см. Фильтрация шума.
Квота
Учитывается как одно событие в месячном лимите ошибок. У других типов свои лимиты, так что наплыв логов или спанов никогда не мешает принимать ошибки.