Создайте глобальные переменные во всем контексте и передайте их в регистратор Winston.
Прежде всего хочу сказать, что я впервые работаю над node. Мое приложение узла не использует экспресс-фреймворк или что-то в этом роде. Мое приложение развернуто в контейнерах под докером. Я использую модуль Winston для хранения журналов приложений. Вот как выглядит мой logger.js:
const { createLogger, format, transports } = require('winston');
const { combine, json, splat, timestamp } = format;
const logLevel = process.env.LOG_LEVEL || 'info';
const logger = createLogger({
level: logLevel,
format: combine(timestamp(), splat(), json()),
defaultMeta: {
service: 'my-service',
'Transaction-Ref-Id': 'HERE SHOULD BE TXNREFID'},
transports: [new transports.Console()],
silent: process.env.NODE_ENV === 'test',
});
module.exports = logger;
Я использую некоторую информацию по умолчанию в каждом журнале, который печатаю. Теперь я хочу создать уникальный идентификатор для каждого запроса, который я получаю в своем приложении, и использовать этот идентификатор во всех методах и функциях, участвующих в запросе. Уникальный идентификатор передается в заголовке, и если пользователь его не передает, я генерирую уникальный идентификатор. Проблема в том, что я не знаю, как передать этот уникальный идентификатор вdefaultMeta
вlogger.js
и иметь его во всем объеме запроса.
Я исследовал локальное хранилище, но считаю, что это плохая практика, поскольку узел — это серверная технология. Я не могу использовать экспресс-фреймворк, cls-hooked или что-то в этом роде.