Express.js - 仅记录失败的请求

时间:2013-05-17 06:24:56

标签: node.js express

有没有办法让express.js记录器只记录失败的请求?

E.g。 4xx和5xx,但没有记录3xx结果?

1 个答案:

答案 0 :(得分:1)

我还没有找到一种简单的方法,但我想出了这个:

function compile(fmt) {
  fmt = fmt.replace(/"/g, '\\"');
  var js = '  return "' + fmt.replace(/:([-\w]{2,})(?:\[([^\]]+)\])?/g, function(_, name, arg){
    return '"\n    + (tokens["' + name + '"](req, res, "' + arg + '") || "-") + "';
  }) + '";'
  return new Function('tokens, req, res', js);
};

var formatter = compile(express.logger.default); // or another format, like '.tiny', '.dev'

app.use(express.logger(function(tokens, req, res) {
  if (res.statusCode === 200 || res.statusCode >= 400) // or whatever you want logged
    return formatter(tokens, req, res);
  return null;
}));

compile()取自connect/lib/middleware/logger.js,遗憾的是不会导出,因此无法在外部使用,因此我复制了它。当然,您也可以使用它生成的函数并直接使用它,但这样您就可以轻松切换日志记录格式。