Я хочу реализовать ведение журнала в службе HTTP NestJS, чтобы каждый входящий запрос получал свой traceId
и регистрировался со строкой журнала. Лучше всего было бы что-то вроде этого:
[LogInterceptor, traceId=b57847d0-ed31-11e9-969e-7dd13d8a9c1e] Before getUser at 1570911778049.
[UsersController, traceId=b57847d0-ed31-11e9-969e-7dd13d8a9c1e] Getting user...
[UsersService] Looking for user by id [testLocal]...
Здесь, как вы можете видеть, я пропускаю traceId
в UsersService
строке журнала, потому что я не знаю, как разумно иметь дело с полной вертикалью, используярегистратор на основе запросов без использования области ввода Scope.REQUEST . Я бы попытался избежать каскадирования всех моих провайдеров в область действия REQUEST
по соображениям производительности.
И мне удалось добиться этого, перехватив входящий запрос, присвоив ему traceId, создав экземпляр логгера с помощью traceId и прикрепив его. запрашивать. Затем в контроллере я внедряю собственный декоратор параметров (с именем класса контроллера, чтобы он брал первую часть контекста логгера).
И из-за природы NodeJS, я считаю, что это насколько я могу получить,Я из мира Java, где мы могли бы справиться с этим, используя потоки и их локальные переменные или различные решения на основе потоков. Каково лучшее решение для этого в этой экосистеме?
Вариант использования - это система ведения журналов производственного класса, которая может сопоставлять журналы из разных частей кода на основе уникального идентификатора запроса.
РЕДАКТИРОВАТЬ: Некоторое время назад я 'Я видел Async Hooks в NodeJS. Я забыл идти в этом направлении во время этого расследования. Но на первый взгляд, они все еще экспериментальная функция. Любые комментарии по решениям на их основе?