我正在使用winston记录器。我想在每个请求中具有相同uuid的日志中添加uuid。如何在每个请求的每个winston日志节点js中添加uuid?
在app.js
var distributorapp = require('./routes/distributorapp');
app.use('/dstapp',distributorapp);
在路由/ distributorapp.js(中间件)
var qs = require('querystring');
var request = require('request');
var logger = require('../locallibs/logger');
var uuid = require('uuid/v1');
module.exports = {
mddlw: function (req, res, next) {
req.bodyData = qs.parse(req.body); // parsing body and added to request object
req.uuid = uuid(); // Adding uuid to request to available every where throught request
callHsmRest(req, res); // function to do some logic and handle middleware functionality
}
};
在logger.js
var winston = require('winston');
var fs = require('fs');
var moment = require('moment');
var today = moment().format('YYYY-MM-DD');
if (!fs.existsSync(today)) {
fs.mkdirSync(today);
}
function customFileFormatter(options) {
console.log(options);
return options.timestamp() + ' [' + options.level.toUpperCase() + '] ' + (undefined !== options.message ? options.message : '') +
(options.meta && Object.keys(options.meta).length ? JSON.stringify(options.meta) : '');
}
var logger = new (winston.Logger)({
transports: [
new (winston.transports.File)({
timestamp: function() {
return moment().format();
},
json: false,
filename: today + '/test.log',
formatter: customFileFormatter
})
]
});
现在我要生成UUID,并将其添加到请求body.So我Middleware.But添加怎么会提供给customFileFormatter格式化功能logger.js每个请求?
当有人使用此记录器记录任何数据时,我希望通过请求将每个日志中的uuid预先记录在记录器格式化程序中。
如果有人需要logger.js
做
logger.info("Hello");
logger.info("Hi");
目前以下我有以下日志
2017-02-24T12:36:23 + 05:30 [INFO] “你好”
2017-02-24T12:36:23 + 05:30 [信息] “嗨”
但我想
2017-02-24T12:36:23 + 05:30 [INFO] c00d6800-fa5f-11e6-83c2-f531bfc95472 “你好”
2017-02-24T12:36:23 + 05:30 [INFO ] c00d6800-fa5f-11e6-83c2-f531bfc95472 “嗨”
而且我想根据路线中间件更改记录文件的路径。
目前,当要求从/dstapp
来到它使用distributorapp
中间件和以后每日志从这个请求转到路径dstapp/2017-02-24/test.log
但是,当请求来自可以说/anotherapp
它使用anotherapp
中间件和随后的日志从这个请求转到路径anotherapp/2017-02-24/test.log
我走过的每一个地方,但无法找到任何解决方案提前
它在文档中https://github.com/bithavoc/express-winston/blob/master/Readme。 md#request-logging而不是格式化程序你可以添加一个模板字符串 - >'transport:{...},msg:'{{req.uuid}}'' – Molda
@Molda我没有使用express-winston包。我只用了温斯顿。我可以在Winston中添加'{{req.uuid}}',因为我使用格式化程序的回调函数 –