【问题标题】:Error logging with express.logger in node.js在 node.js 中使用 express.logger 记录错误
【发布时间】:2012-06-30 07:21:22
【问题描述】:

我正在尝试使用自定义函数通过 express.logger(...) 仅将某些事件记录到文件中,当响应和请求不符合我设置的标准时,它会挂起。

var express = require('express'),
 app = express.createServer(
  express.logger(function(req, res) {
   var status = res.statusCode,
   color = 32;

   if (status >= 500) color = 31;
   else if (status >= 400) color = 33;
   else if (status >= 300) color = 36;

   if (req.method==='POST' && req.originalUrl!=='/plankton') {
    return '\033[90m' + req.method
     + ' ' + req.originalUrl + ' '
     + '\033[' + color + 'm' + res.statusCode
     + ' \033[90m'
     + (new Date - req._startTime)
     + 'ms\033[0m';
   }
   else if (res.statusCode>=400) {
    return '\033[90m' + req.method
     + ' ' + req.originalUrl + ' '
     + ' ' + req.body + ' '
     + '\033[' + color + 'm' + res.statusCode
     + ' \033[90m'
     + (new Date - req._startTime)
     + 'ms\033[0m';
   } else {
// what should be inserted here?
// I only want to log the above events...
   }
  });
 )

return '' 在 else 中不起作用。它挂起,我的猜测是它不允许响应完成/发送。

也许我应该使用不同的方法来记录日志,但我喜欢 express 中间件的简单性,因为它允许我不必在任何地方都包含日志消息 - 或者我也可以解决这个问题并有一个特定的监听器事件..

关于我应该在 else 中拥有什么的任何想法?或者有更好的方法建议?

【问题讨论】:

    标签: node.js express error-logging


    【解决方案1】:

    您需要了解中间件 API 基于异步回调,而不是同步返回值。中间件函数的返回值将被完全忽略。你需要遵循这个模式:

    function (req, res, next) {
        //look at req
        //do whatever logging you decide you want to do
        //Tell express that you are done and it can move along the middleware chain
        next();
    }
    

    【讨论】:

    • 谢谢。我对异步世界很陌生。
    猜你喜欢
    • 2015-04-14
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多