是的,有很多不同的Node.js日志库winston,bunyan和console.log。在调用特定请求的时间以及响应时间和信息时,可以轻松记录特定请求的信息。
问题始于子函数调用。当你在一个请求下调用多个也使用相同日志记录的函数时,你如何将请求元数据传递给这些日志调用(函数参数似乎是一种可能的方式,但这些都非常混乱)?
编码员的小视觉:
// Middleware to set some request based information
app.use(function (req, res, next) {
req.rid = 'Random generated request id for tracking sub queries';
});
app.get('/', function (req, rest) {
async.series({
'users': async.apply(db.users.find),
'posts': async.apply(db.posts.find),
}, function (err, dbRes) {
console.log('API call made ', req.rid)
res.end(dbRes);
});
});
// Now the database functions are in other file but we also need to track down the request id in there
(db.js)
module.exports = {
users: {
find: function () {
console.log('Calling users listing ', req.rid); // ERROR this is not possible to access, not in this scope
// Make query and return result
}
},
posts: {
find: function () {
console.log('Calling post listing ', req.rid); // ERROR this is not possible to access, not in this scope
// Make query and return result
}
}
};
答案 0 :(得分:0)
您可以使用;
在app.js中使用简单的conf记录您的请求app.use(function(req, res, next){
console.log('%s %s', req.method, req.url);
next();
});
但是,您需要为控制器中的特定功能提供日志。