发送HTTP响应后如何记录HTTP请求/响应信息?

时间:2015-02-17 04:48:34

标签: node.js express winston

我使用express构建了我的API。

开箱即用,它使用morgan,可以用作记录中间件。从我可以看到它绑定到请求并侦听事件,并能够在连接完成时收集数据。这使它能够记录传输数据的时间和大小。

我更喜欢使用像winston这样的东西,它有很适合我的传输选项,虽然我希望用我的服务器捕获更多关于I / O的数据。

我有自己的自定义通用响应函数,我可以在从API端点响应时记录额外信息。

对于静态资产的记录请求,我不能这样做。

所以我非常需要能够拥有一个绑定到请求的功能并在完成时登录,这样我就可以跟踪所有请求中的响应时间,响应大小和其他详细信息。

如何在使用winston的同时实现这一目标?

1 个答案:

答案 0 :(得分:0)

我很久以前就解决了这个问题......

结束使用此程序包来帮助检测响应标头的写入时间(表示响应结束) - https://github.com/jshttp/on-headers

这是我作为中间件实现的代码,用于在每个响应结束时实现日志记录:

// Log Request
app.use(function (req, res, next) {
  // Listen for response event and log
  onHeaders(res, function () {
    logger.info({
        _id: req.id,
        client: {
            ip: function () {
                return req.ip
                    || req._remoteAddress
                    || (req.connection && req.connection.remoteAddress)
                    || undefined
            }()
        },
        method: req.method,
        url: req.url,
        statusCode: res.statusCode,
        time: (Date.now() - req.start),
        'res-length': res._headers['content-length'] || 0,
        'req-length': req.headers['content-length'] || 0
    });
  });

  next();
});