У меня есть приложение Angular, использующее Sentry.io для ведения журнала. Я создал собственный класс обработчика ошибок, в котором я инициализирую Sentry, и я хотел бы избежать ошибок сервера журнала (404 Not Found или 500 Server Error).
Я прочитал, что если сетевой вызов завершается неудачно в Angular, исключение всплывает и не улавливается в ErrorHandler (следовательно, не запускается метод handleError
).
Однако, даже если я использую метод beforeSend()
, как было предложено в этом конкретном случае c, журналы консоли записываются (например, SENTRY SKIPPING EVENT), но все ошибки сервера продолжают регистрироваться в Sentry.
export class MyhErrorHandler implements ErrorHandler {
if (environment.production) {
Sentry.init({
dsn: 'https://12314567@sentry.io/123456789',
environment: this.environmentData.env,
beforeSend(event) {
try {
if (this.isServerError(JSON.stringify(event))) {
console.log('------ SENTRY SKIPPING EVENT: ', {event});
return null;
}
} catch (e) {
console.log('------ SENTRY ERROR: ', {e});
}
return event;
}
});
}
handleError(err: any): void {
if (!this.isServerError(err)) {
const errorText = MyhErrorHandler.getError(err);
Sentry.captureException(errorText);
}
}
private isServerError(error: any): boolean {
if (!error) {
return false;
}
const regex = new RegExp(
`500 Internal Server Error|401 Unauthorized|403 Forbidden|404 Not Found|502 Bad Gateway|503 Service Unavailable`,
'mi'
);
return regex.test(JSON.stringify(error);
} catch (error) {
Sentry.captureException(`Error in myh-error-handler while parsing error Obj: ${errorText} -- ${error.message}`);
}
}
}