Логирование
Для логирования событий пакет предоставляет простейшую реализацию логгера - объекта, содержащего методы для фиксации событий жизненного цикла приложения.
Logger
Интерфейс Logger имеет ряд методов для фиксации наиболее распространённых событий работы программы, вроде info
, error
, debug
и тд подобно объекту console.
Logger реализует простейшую систему подписки на события, благодаря чему их можно выводить в консоль, отправлять в Sentry и тд.
Пример использования
import { createLogger } from '@sima-land/isomorph/log';
const logger = createLogger();
// регистрация обработчика
logger.subscribe(event => {
console.log(event.type, event.data);
});
// ...позже в коде
if (somethingWrong) {
logger.error('something wrong');
}
Сбор ошибок
Для отслеживания ошибок мы используем преимущественно Sentry. Отправку ошибок и друг их событий в Sentry можно реализовать используя Logger со специальным обработчиком для Sentry.
Пакет предоставляет классы для формирования готовых к отправке объектов, представляющих ошибки и "хлебные крошки".
Примеры использования
Подготовим логгер и обработчик для него. Для работы обработчику нужен Sentry Scope.
import { createLogger, createSentryHandler } from '@sima-land/isomorph/log';
import { BrowserClient, Scope } from '@sentry/browser';
const sentryClient = new BrowserClient({ dsn: process.env.SENTRY_DSN });
const sentryScope = new Scope(); // пустой scope в качестве примера
const logger = createLogger();
logger.subscribe(createSentryHandler(sentryHub));
Зарегистрированный обработчик будет отсылать все ошибки и "хлебные крошки" в Sentry.
Любые данные, переданные логгеру через метод error
также будут отправлены в Sentry.
import { DetailedError, Breadcrumb } from '@sima-land/isomorph/log';
// отправка ошибки
logger.error(
new DetailedError('something wrong', {
extra: {
key: 'something',
data: 'wrong',
},
}),
);
// отправка "хлебной крошки"
logger.info(
new Breadcrumb({
category: 'something happens',
data: {
foo: 1,
bar: 2,
},
}),
);