node.js表示请求标识

我正在尝试为logging目的创build某种请求ID,这将通过请求stream中的每个函数提供给我。 我想logging请求stream的每一步,并指出哪个日志行是哪个请求的。

我已经看了一些想法,碰到了两个主要的build议:

首先是创build一个中间件,它将在'req'对象中添加一个字段,就像这样(如这里所build议的):

var logIdIterator = 0; app.all('*', function(req, res, next) { req.log = { id: ++logIdIterator } return next(); }); 

第二个是使用连续本地存储

问题是:

对于第一种方法 – 这意味着我将不得不向stream中的每个函数传递额外的参数,这不是一个简单的解决scheme,可以通过无数的API和stream来完成。

第二个看起来很有希望,但不幸的是,它有一些国家迷路的问题(例如,见这里 )。 而且,当我们使用我们的redis库的时候发生了几次 – 这是不好的,因为redis请求发生在我们每个stream程上。

我想,如果我没有find另一个解决scheme,我将不得不使用第一种方法,这只是为了避免向成千上万的现有函数传递额外的参数。

我的问题是 – 你如何build议通过请求stream维护请求Id?

(a)将信息存储为仅限服务器的cookie,(b)将更多信息放入cookie中,而不仅仅是柜台。 例如,我使用以下作为对我的应用程序的所有调用的跟踪:

 console.log('['+count+'] at: '+format.asString('hh:mm:ss.SSS', new Date())+' Url is: ' + req.url); 

其中“计数”从应用程序开始增加(是的,最好使用持久性单身人士)。 这给了我对服务器(req.url)的每一个调用,以及这个调用的确切时间。 如果您的应用正在进行会话级别pipe理,则可以轻松扩展此选项以获取sessionID。

你可以使用这个包: https : //www.npmjs.com/package/express-request-id

这是将为每个请求附加uuid的中间件

 var app = require('express')(); var addRequestId = require('express-request-id')(); app.use(addRequestId); app.get('/', function (req, res, next) { res.send(req.id); next(); }); app.listen(3000, function() { console.log('Listening on port %d', server.address().port); }); // curl localhost:3000 // d7c32387-3feb-452b-8df1-2d8338b3ea22