Выбор ответа Middle Ошибки и логирование обновлено
Request id через всю цепочку
Вопрос
Нужно, чтобы каждая строка лога внутри обработки запроса содержала его request id, не передавая его аргументом в каждую функцию. Что использовать в Node?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: AsyncLocalStorage из node:asynchooks. AsyncLocalStorage хранит контекст, который сохраняется через await, таймеры и колбэки внутри als.run(store, fn).
Варианты ответа
AsyncLocalStorageизnode:async_hooksправильный ответ- Глобальную переменную
currentRequestIdв модуле process.env.REQUEST_IDworker_threadsпо воркеру на запрос
Разбор
AsyncLocalStorage хранит контекст, который сохраняется через await, таймеры и колбэки внутри als.run(store, fn). Логгер берёт id из als.getStore(). Так делают и трассировка OpenTelemetry, и request-scoped логгеры.
- Глобальная переменная перезапишется параллельным запросом: их много одновременно.
process.envобщий на процесс, проблема та же.- Воркер на запрос дорог и не решает задачу контекста.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Операционная или программная ошибка
Следующий вопрос
Как ты обрабатываешь ошибки в Node-сервисе