如何配置Morgan以跳过响应时间较短请求的日志记录
解决Morgan根据响应时间跳过日志的问题
Morgan的skip回调执行时机早于内部响应时间的计算,所以没法直接从res对象获取Morgan计算好的响应时间。你可以自己实现响应时间的计算逻辑,来达到需求:
- 先添加一个前置中间件,记录请求开始时间
- 在
skip函数中计算响应时间,再判断是否跳过日志
示例代码:
// 前置中间件:记录请求开始时间 app.use((req, res, next) => { req.startTime = Date.now(); next(); }); // 配置Morgan,自定义skip逻辑 app.use(morgan("common", { skip: (req, res) => { const responseTime = Date.now() - req.startTime; // 逻辑说明:当状态码>400 或 响应时间>200时,不跳过日志(返回false) // 其他情况跳过日志(返回true),与你原代码逻辑对应 return !(res.statusCode > 400 || responseTime > 200); } }));
注意:Morgan的skip函数返回true时会跳过日志记录,所以需要把你原本的判断逻辑反转。
内容的提问来源于stack exchange,提问作者Stephen Rich
相关产品推荐
相关产品推荐

