我正在尝试为日志记录目的创建某种请求ID,这将通过请求流中的每个函数提供给我。我想记录请求流的每一步,并在一个Id中指出哪个日志行是哪个请求的。node.js快速请求Id
我看过了一些想法,跑进2点主要建议:
首先是创建将在“请求”对象添加一个字段像这样一个中间件(如建议here):
var logIdIterator = 0;
app.all('*', function(req, res, next) {
req.log = {
id: ++logIdIterator
}
return next();
});
,第二个是使用continuation-local-storage
的问题是:
对于第一种方法 - 它意味着我必须为流中的每个函数传递一个额外的参数,这对于具有无数API和流程的成熟应用程序来说不是一个简单的解决方案。
第二个看起来很有希望,但不幸的是它有一些问题,其中国家迷路(例如见here)。 此外,它发生了几次,当我们使用我们的Redis库 - 这是坏的,因为redis请求发生在我们每个流程上。
我想如果我没有找到另一个解决方案,我将不得不使用第一种方法,它只是为了避免向数千个现有函数传递额外的参数。
我的问题是 - 你如何建议通过请求流维护请求ID?
为什么传递'req'对象只有一个属性(这只是一个数字)会成为一个问题?我不认为这会导致任何明显的性能下降? – leroydev
这不是我担心的表现。为大量函数添加额外的参数是耗时且易出错的 –
为什么您需要添加额外的参数才能实现? – leroydev