繁体   English   中英

如何将 4XX 和 5XX 错误发送给哨兵?

[英]How to send 4XX and 5XX errors to sentry?

我想捕获哨兵中的任何 4XX 和 5XX 错误。 我发现 sentry 默认情况下不会将 4XX 错误记录到 sentry 中,因此我也添加了shouldHandleError错误处理程序,但 5XX/4XX 响应仍然不会发送到哨兵。


import express, { Express } from 'express';
import * as Sentry from '@sentry/node';
import config from '../../../config/default';
import mountRoutes from './routers';

initSentry();
const app = express();
setupSentryHeaders(app);
app.use(express.json());

app.get('/',(req: any , res: any) => {
  res.sendStatus(502)
})
setSentryErrorHandler(app);

app.listen(8000, async () => {
  console.log(`service running...`);
});

function initSentry() {
  Sentry.init({
    dsn: config.sentry_dsn,
    environment: "development",
    attachStacktrace: true
  });
}

function setSentryErrorHandler(app: Express) {
  app.use(Sentry.Handlers.errorHandler({
    shouldHandleError(error) {
      const statusCode = error.statusCode
      if(statusCode > 400 ){
        return true;
      }
      return false;
    },
  }));
}
function setupSentryHeaders(app: Express) {
  app.use(Sentry.Handlers.requestHandler() as express.RequestHandler);
}

您将错误与正确的响应混淆了。

res.status(502)是一个有效的响应,它将结束中间件管道并且不会触发任何错误中间件,因为响应是请求已经完成。

您正在寻找的是错误,在这种情况下分配的状态代码为502 ,然后进行相应处理。

app.get('/',(_, res) => {
  const err = new Error('Something went wrong');
  err.statusCode = 502;
  throw err;
})

这 + 你的shouldHandleError将使它“可捕获”,作为 express 的默认错误处理程序,从err.statusCode分配响应状态代码,请参阅 https 的“默认错误处理程序” ://expressjs.com/en/guide/error-handling .html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM