Обзор
consoleIntegration превращает каждый вызов console.log, info, warn, error и debug в событие лога Buglapse соответствующего уровня, так что существующий вывод консоли появляется в разделе Логи без переписывания на log.*(). Исходный вызов по-прежнему печатает в stdout/stderr как обычно.
Аргументы разбираются так же, как их принимает log.*(): последний простой объект становится атрибутами лога, всё перед ним склеивается в сообщение.
ts
console.warn('Payment retry', 3, { orderId: 'A-1042' })
// → лог warn "Payment retry 3" с атрибутами { orderId: 'A-1042' }Первый аргумент с плейсхолдерами printf форматируется так же, как это делает сама консоль, и сохраняется как шаблон лога — повторы с другими значениями схлопываются в одну строку, как с fmt:
ts
console.log('Order %s failed after %d tries', 'A-1042', 3, { region: 'eu' })
// → "Order A-1042 failed after 3 tries", атрибуты:
// { 'message.template': 'Order %s failed after %s tries',
// 'message.parameter.0': 'A-1042', 'message.parameter.1': 3, region: 'eu' }%s, %d, %i, %f, %o, %O и %j берут по одному аргументу; %c берёт аргумент и ничего не печатает; %% — буквальный %. Оставшиеся аргументы дописываются как раньше. Строка без плейсхолдеров — или без значений для подстановки — обычное сообщение.
Error среди аргументов попадает в сообщение как Имя: сообщение, а его стек — в атрибуты exception.type, exception.message и exception.stacktrace:
ts
console.error('Checkout failed:', error)
// → лог error "Checkout failed: TypeError: Cannot read properties of undefined", атрибуты:
// { 'exception.type': 'TypeError', 'exception.message': '…', 'exception.stacktrace': '…' }Объекты пишутся как JSON; ошибки внутри них — с name, message и stack, циклические ссылки — как [Circular]. Чтобы ошибка стала задачей (issue) со стеком и группировкой, сообщайте о ней через captureException().
Лог, пойманный во время запроса, несёт область и трейс этого запроса, как любое событие.
Использование
ts
import { use } from '@buglapse/node'
import { consoleIntegration } from '@buglapse/node/integrations'
use(consoleIntegration())Опций нет.
Что помнить:
- Все библиотеки процесса пишут в один
console, так что отправляется и всё, что печатают они, — и расходует квоту логов. - Логгеры, которые пишут прямо в
process.stdout(pino, большинство транспортов winston), не идут черезconsoleи не перехватываются. - Собственный вывод
debugSDK обходит подменённую консоль, так что не перехватывается никогда.
Если вывод консоли нужен только как контекст к ошибкам, используйте опцию console у BreadcrumbsIntegration. Как отправлять логи явно — на странице Логи.