是否有一种巧妙的方法在并发系统中进行上下文记录?

时间:2014-04-01 07:45:25

标签: node.js logging concurrency

我的具体示例是针对Node.js,但我认为在任何基于事件循环的系统中都存在同样的问题。

考虑以下简单应用:

var logger = loggingmodule.Logger();

var server = http.createServer(function(req, res) {
    req.id = crypto.pseudoRandomBytes(10).toString('hex');
    var log = logger.transaction(req.id);

    loadSomeAsyncData(log, function(err, data) {
        if (err) return bailout(err, req, res);

        doSomeAsyncAction(log, req.url, data.action, function(err, result) {
            if (err) return bailout(err, req, res);

            hydrateResultWithMoreAsyncData(log, data, result, onMoreData);

            function onMoreData(err, moreData) {
                if (err) return bailout(err, req, res);

                result.data = moreData;

                res.end(JSON.stringify({
                    data: data,
                    result: result,
                }));
            }
        });
    });
});
  • 日志记录模块有一个transaction方法,该方法返回一个上下文记录器,该记录器为所有行添加相同的标记
  • 要关联请求期间执行的任何操作,我们需要传递此记录器
  • 这些操作还需要将记录器传递给他们的家属
  • 一切都需要以某种方式接受记录器参数

问题:是否有将记录器传递给每个功能的替代方法?

我能想到的最接近的东西就是线程局部绑定 - 当然,对于Node.js来说,没有这样的抽象或afaik存在

0 个答案:

没有答案