Я пытаюсь создать какой-то идентификатор запроса для ведения журнала, который будет доступен мне через каждую функцию потока запросов. Я хочу регистрировать каждый шаг потока запросов с идентификатором, указывающим, какая строка журнала для какого запроса.
Я просмотрел некоторые идеи и столкнулся с двумя основными предложениями:
Первое - это создание промежуточного программного обеспечения, которое добавит поле в объект 'req', как это (как предложено здесь):
var logIdIterator = 0;
app.all('*', function(req, res, next) {
req.log = {
id: ++logIdIterator
}
return next();
});
И второй использует continuation-local-storage
Проблемы:
Для первого подхода - это означает, что мне придется передать дополнительный аргумент каждой функции в потоке, и это нелегкое решение для использования над зрелым приложением с бесчисленными API и потоками.
Второй выглядит многообещающим, но, к сожалению, он имеет некоторые проблемы, в которых государство теряется (см. здесь). Кроме того, это произошло несколько раз, когда мы использовали нашу библиотеку redis - что плохо, потому что запросы redis происходят в каждом из наших потоков.
Я думаю, если я не найду другого решения, мне придется использовать первый подход, просто я хочу избежать передачи дополнительного параметра тысячам существующих функций.
Мой вопрос: как вы предлагаете поддерживать идентификатор запроса через поток запросов?