Перейти к содержимому

Обзор ​

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 и не перехватываются.
  • Собственный вывод debug SDK обходит подменённую консоль, так что не перехватывается никогда.

Если вывод консоли нужен только как контекст к ошибкам, используйте опцию console у BreadcrumbsIntegration. Как отправлять логи явно — на странице Логи.