跟踪和记录node.js服务器内部发出的http调用

跟踪和记录node.js服务器内部发出的http调用,node.js,http,logging,cloud,microservices,Node.js,Http,Logging,Cloud,Microservices,我正在调试从我的express应用程序到网络上另一个微服务的呼叫。我收到401个错误,我需要获得完整的原始http日志,以提供给我的安全团队进行分析 我正在寻找一些关于跟踪来自我在Pivotal Cloud Foundry上部署的微服务的HTTP调用的建议。我一直在做一些研究,并遇到了Zipkin和OpenTracing等工具。。但这些似乎更多地是关于调试延迟的,并且可能不会显示HTTP日志。我也尝试过使用Morgan/Winston模块,但它们不跟踪内部呼叫。Morgan目前是我用来注销基本H

我正在调试从我的express应用程序到网络上另一个微服务的呼叫。我收到401个错误,我需要获得完整的原始http日志,以提供给我的安全团队进行分析


我正在寻找一些关于跟踪来自我在Pivotal Cloud Foundry上部署的微服务的HTTP调用的建议。我一直在做一些研究,并遇到了Zipkin和OpenTracing等工具。。但这些似乎更多地是关于调试延迟的,并且可能不会显示HTTP日志。我也尝试过使用Morgan/Winston模块,但它们不跟踪内部呼叫。Morgan目前是我用来注销基本HTTP代码的工具,但它也不会从我的应用程序中接听我的电话,只是从浏览器中拨打给应用程序本身的电话。我需要获得完整的原始HTTP请求以协助安全团队。我使用morgan(STDOUT)的默认日志输出。我已经记录了标题以查看标题,但希望以可读性稍高的格式将其显示出来。

要记录从Node.js服务器发送的内部HTTP请求,可以创建一个Proxy Node.js服务器,并使用日志记录所有请求

const request = require('request');
const morgan = require('morgan')(':method :url :status Cookie: :req[Cookie] :res[content-length] - :response-time ms');
...
if (ENABLE_LOGGER && LOGGER_ENDPOINT) {
  let loggerPort = 3010;
  const logger = http.createServer((req, res) => {
    morgan(req, res, () => {
      req.pipe(request(API + req.url)).pipe(res);
    });
  });
  logger.listen(loggerPort);
}
首先,定义3个常量(或从项目配置文件中读取):

第三,在Node.js服务器中,当
ENABLE\u logger
为true时,向logger服务器发送API请求;当
ENABLE\u logger
为false时,直接向真实服务器发送API

let app = express(); // assume Express is used, but this strategy can be easily applied to other Node.js web framework.
...
let API_Endpoint = ENABLE_LOGGER ? LOGGER_ENDPOINT : API;
app.set('API', API_Endpoint);
...
// When HTTP request is sent internally
request(app.get('API') + '/some-url')... 

非常感谢您的回复@shaochuancs。这正是我所需要的:)
let app = express(); // assume Express is used, but this strategy can be easily applied to other Node.js web framework.
...
let API_Endpoint = ENABLE_LOGGER ? LOGGER_ENDPOINT : API;
app.set('API', API_Endpoint);
...
// When HTTP request is sent internally
request(app.get('API') + '/some-url')...