有没有办法让 express.js 记录器只记录失败的请求?
例如 4xx 和 5xx,但不记录 3xx 结果?
我还没有找到一个简单的方法来做到这一点,但我想出了这个:
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
是它没有导出,因此不能在外部使用,因此我复制了它。当然,您也可以使用它生成的函数并直接使用它,但是这样您就可以轻松地切换日志格式。