快速记录并存储请求信息

时间:2014-03-06 12:32:33

标签: node.js logging express

背景

是的,有很多不同的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
      }

   }

};

1 个答案:

答案 0 :(得分:0)

您可以使用;

在app.js中使用简单的conf记录您的请求
app.use(function(req, res, next){
  console.log('%s %s', req.method, req.url);
  next();
});

但是,您需要为控制器中的特定功能提供日志。