[英]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.