我已经使用 Express 构建了一个 Node JS REST 服务。登陆此服务的每个请求都有像“X-org-ReqId”和“X-org-Tid”这样的标题,我需要登录在执行该请求期间写入的所有日志行。基本上,我需要在每个日志行中记录一些上下文信息,以帮助我通过多个服务进行事务/请求跟踪。
我正在使用这样初始化的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 默认为该日志语句添加时间戳,但我也想记录诸如 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"}
在我们曾经有NDC的 java 世界中,在 Node JS 世界中是否有等价物?