我想为记录目的创建某种请求ID,该ID将通过请求流程中的每个功能对我可用。我希望记录每个请求流程的每个步骤,并使用一个ID说明哪个日志行是哪个请求的。
我查看了一些想法,并遇到了2个主要建议:
第一个是创建一个中间件,将在'req'对象中添加一个字段,如下所示(如此处建议):
var logIdIterator = 0;
app.all('*', function(req, res, next) {
req.log = {
id: ++logIdIterator
}
return next();
});
第二种方法是使用continuation-local-storage
存在以下问题:
对于第一种方法-这意味着我将不得不向流程中的每个函数传递一个额外的参数,而且这并不是一个容易解决的方案,尤其是在一个有无数API和流程的成熟应用程序中。
第二种方法看起来很有前途,但不幸的是它存在一些问题,其中状态会丢失(例如请参见这里)。 此外,有几次我们使用了Redis库时也发生了类似问题-这很糟糕,因为Redis请求会在我们的每个流程中发生。
我想如果找不到其他解决方案,我将不得不使用第一种方法,只是我想避免向数千个现有函数传递额外的参数。
我的问题是-您建议如何通过请求流程维护请求ID?