有没有办法让express.js记录器只记录失败的请求?
E.g。 4xx和5xx,但没有记录3xx结果?
答案 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
,遗憾的是不会导出,因此无法在外部使用,因此我复制了它。当然,您也可以使用它生成的函数并直接使用它,但这样您就可以轻松切换日志记录格式。