如何使用Winston / MorganloggingJSON HTTP响应

我使用Winston和Morgan来处理Sails.js中的所有后端日志logging,我需要能够logging来自HTTP请求的响应。 我需要将它们logging在一个文件中。 我的logFile目前需要显示所有的http请求,但是它不显示响应。 我已经search了摩根和温斯顿的所有选项,并找不到一个方法/选项来做到这一点。 我只是想知道你们是否有任何build议如何做到这一点? 谢谢!

您可以为ExpressJS编写一个中间件function,一旦发送响应,它就会logging主体。 基于Node的http模块 ,看看Connect(以及Express)如何pipe理响应主体(这是一个stream):你可以钩入写入该stream的两个方法来获取块,然后将它们连接/解码为logging它。 简单的解决scheme,可以做得更强大,但它显示了这个概念的作品。

function bodyLog(req, res, next) { var write = res.write; var end = res.end; var chunks = []; res.write = function newWrite(chunk) { chunks.push(chunk); write.apply(res, arguments); }; res.end = function newEnd(chunk) { if (chunk) { chunks.push(chunk); } end.apply(res, arguments); }; res.once('finish', function logIt() { var body = Buffer.concat(chunks).toString('utf8'); // LOG BODY }); next(); } 

然后在主应用程序路由器中分配任何路由之前进行设置:

 app.use(bodyLog); // assign routes 

我会假设你也可以用这个作为摩根的一个variables的赋值,但是我还没有研究过asynchronousvariables赋值是如何工作的。