过滤node.js中的传出请求以进行日志记录

时间:2015-04-15 09:33:57

标签: javascript node.js

我正在构建一个Express应用程序,在某些请求中必须进行自己的HTTP调用。我可以使用Superagent,请求或节点自己的http.request。 事实是,我需要记录所有这些服务器发起请求及其各自的响应。在每一个之前调用log.info似乎很愚蠢。

如何为所有外发HTTP呼叫添加预过滤器,理想情况下同时访问reqres

注意:我对记录进入我正在构建的服务器的请求不感兴趣,只是在服务器本身启动的请求中。将我的服务器视为另一个黑匣子服务器的客户端。

2 个答案:

答案 0 :(得分:2)

您可以做的是修补http和https并代理request方法。通过这种方式,您可以拥有一个全局处理程序来捕获req& res对象。

var http    = require('http');
var https   = require('https');

var patch = function(object) {
    var original = object.request;

    // We proxy the request method
    object.request = function(options, callback) {
        // And we also proxy the callback to get res
        var newCallback = function() {
            var res = arguments[0];

            // You can log res here
            console.log("RES",res.statusCode);

            callback.apply(this,arguments);
        }

        var req = original(options, newCallback);

        // You can log your req object here.
        console.log(req.method,req.path);

        return req;
    }
}

patch(http);
patch(https);

http.get("http://www.google.com/index.html", function(res) {
  console.log("Got response");
}).on('error', function(e) {
  console.log("Got error: " + e.message);
});

编辑:如果你也使用request npm包,这可能会有效,因为它可能只依赖于内置的node.js http.request方法。

答案 1 :(得分:0)

您要为您的应用使用哪种服务器? 我绝对会将这些功能提升到服务器级别。看看heroku路由器是如何做到的。您可以使用他们的一些插件跟踪所有需要的信息:papertrail或newrelic(或为您的app分别使用它们)。

https://papertrailapp.com/

http://newrelic.com/

在这种情况下,我喜欢开箱即用的解决方案,无需扩展您的应用逻辑来记录此类信息。

如果您想拥有自己的解决方案,可以设置nginx来监控请求/响应信息。 http://nginx.com/resources/admin-guide/logging-and-monitoring/

相关问题