0

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

例如 4xx 和 5xx,但不记录 3xx 结果?

4

1 回答 1

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是它没有导出,因此不能在外部使用,因此我复制了它。当然,您也可以使用它生成的函数并直接使用它,但是这样您就可以轻松地切换日志格式。

于 2013-05-17T07:16:13.623 回答