我正在使用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}}',因爲我使用格式化程序的回調函數 –