【问题标题】:How to log HTTP request/response information after the HTTP response is sent?发送 HTTP 响应后如何记录 HTTP 请求/响应信息?
【发布时间】:2017-05-25 14:55:16
【问题描述】:

我的 API 是用 express 构建的。

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

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

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

我不能对静态资产的记录请求做同样的事情。

所以我非常需要能够绑定到请求并在完成时记录的函数,以便我可以跟踪所有请求的响应时间、响应大小和其他详细信息。

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

【问题讨论】:

  • 请出示您的代码。

标签: node.js express winston


【解决方案1】:

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

最终使用此包来帮助检测何时写入响应标头(表示响应结束)-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();
});

【讨论】:

    猜你喜欢
    • 2011-12-21
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    相关资源
    最近更新 更多