首页 > 解决方案 > 禁止在 express 中的 next(err) 方法上将日志记录到控制台

问题描述

app.get('/test', (req, res, next) => {
  const err = new Error('Test');
  next(err);
});

express 会将错误和堆栈跟踪记录到控制台。有没有办法可以抑制日志记录?

标签: node.jsexpress

解决方案


如果您在 Express 实现中放置一个错误处理程序中间件来处理这样的next(err)调用:

// defined as the last route
app.use(function (err, req, res, next) {
    res.status(500).send('Something broke!')
});

然后,Express 不会记录任何错误,您可以控制针对错误发送的响应。

我建议阅读有关 Express 错误处理的页面:https ://expressjs.com/en/guide/error-handling.html 。


如果您查看此日志记录来自的快速代码,它来自此代码

function logerror(err) {
  /* istanbul ignore next */
  if (this.get('env') !== 'test') console.error(err.stack || err.toString());
}

奇怪的是,如果你这样做:

app.set('env', 'test');

或者您NODE_ENV=test在启动服务器之前在环境中设置,那么它也会跳过错误日志记录。但是,最好使用您自己的错误处理程序来控制事情,因为我展示了您还可以在哪里控制发送什么类型的响应。


推荐阅读