Я создал службу Node JS REST с помощью Express. Каждый запрос, который приземляется на эту службу, имеет заголовки, такие как «X-org-ReqId» & «X-org-Tid», в котором мне нужно войти во все строки журнала, которые написаны во время выполнения этого запроса. В основном мне нужно записывать некоторую контекстуальную информацию в каждую строку журнала, чтобы помочь мне отслеживать транзакции/запросы через несколько служб.Как регистрировать запрос и идентификатор транзакции в каждой строке журнала, используя winston для Node JS?
Я использую Winston регистратор инициализирован так:
var winston = require('winston');
var appLogger = new(winston.Logger)({
transports: [
new(winston.transports.Console)({
level: 'info', //TODO: Should be changed to Error in prod
colorize: true
}),
new(winston.transports.DailyRotateFile)({
filename: '/var/log/org/my-service.log',
datePattern: '.yyyy-MM-dd',
tailable: true,
// handleExceptions: true,
json: true,
logstash: true
})
],
exitOnError: false
});
appLogger.on('error', function(err) {
console.error("Logger in error", err);
});
module.exports.logger = function() {
return appLogger;
};
и в отдельных классах, где я хочу, чтобы использовать его, я так:
var logger = require('../config/logger').logger();
myObject.on("error", function (err) {
logger.error("Error connecting bucket=" + bucketId , err);
});
Это произведет журнал, как это:
{"level":"info","message":"Error connecting bucket=2.....","timestamp":"2015-06-10T06:44:48.690Z"}
Winston по умолчанию добавить timestamp в этот оператор журнала, но я также хочу регистрировать такие вещи, как req.headers ['X-org-ReqId'] & req.headers ['X-org-Tid'], чтобы я знал, какая транзакция была неудачной и какова была ошибка.
Я хочу, чтобы войти, как это:
{"level":"info","message":"Error connecting bucket=2....","timestamp":"2015-06-10T06:44:48.690Z", "tid":"a3e8b380-1caf-11e5-9a21-1697f925ec7b", "reqid":"aad28806-1caf-11e5-9a21-1697f925ec7b"}
В Java мире мы привыкли иметь NDC, есть эквивалент в узле JS мире?