@sentry/browser
@sentry/node
raven-js
raven-node
_(gagak untuk simpul)_@sentry/browser": "4.4.2"
Halo semua,
Seperti yang saya jelaskan di atas, saya menggunakan Angular6 + Ngrx6.
Yang ingin saya lakukan adalah mengirim kesalahan ke Sentry ketika webApp gagal memanggil api.
Katakanlah, saya memanggil api bernama /abc/3
yang tidak ada.
Kemudian klien mendapatkan kesalahan 404 Not Found
.
Dan ini yang ingin saya kirim ke Sentry melalui @sentry/browser
.
Saya telah membuat layanan sederhana.
@Injectable({
providedIn: 'root'
})
export class SentryService {
constructor() { }
captureException(error: any) {
Sentry.captureException(error.originalError || error);
throw error;
}
}
dan telah membuat SentryErrorHandler
yang memperluas ErrorHandler
. Angular
@Injectable()
export class SentryErrorHandler implements ErrorHandler {
constructor(private sentry: SentryService) {}
handleError(error: any): void {
this.sentry.captureException(error);
throw error;
}
}
Kode ini mendeteksi kesalahan js normal seperti
abcdefg(); // <- this function doesn't exist so it occurs an error and sent to Sentry.
Namun, saya menemukan bahwa kode di atas tidak mendeteksi kesalahan jaringan. (Seperti yang saya katakan /abc/3
)
Jadi saya telah membuat ErrorInterceptor
yang memperluas HttpInterceptor
Angular.
@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
constructor(
private _injector: Injector,
private sentry: SentryService
) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req)
.pipe(
tap(event => {}, error => {
if (error) {
this.sentry.captureException(error);
}
})
);
}
}
Lalu saya bisa menangkap kesalahan jaringan.
Tetapi masalahnya adalah saya tidak dapat melihatnya di dasbor Sentry saya.
Saya memeriksa tab jaringan Chrome saya. Dan saya dapat menemukan pesan:
"Pengecualian Non-Error ditangkap dengan kunci: kesalahan, header, pesan, nama, ok ..."
Jadi saya kira @sentry/browser tidak menganggap ini kesalahan.
Saya juga menemukan ini bahwa berbicara tentang Non-Error exception captured with keys: error, headers, message, name, ok…
Jadi inilah pertanyaan saya.
Terima kasih!
@Taewa Objek kesalahan yang dilemparkan oleh Angular tidak dalam format yang sama dengan SentryEvent
.
Salah satu caranya adalah dengan menggunakan captureMessage(message: string)
dengan beberapa info kesalahan. Itulah cara sederhana yang saya pilih juga: https://github.com/pascaliske/ngx-sentry/blob/master/projects/ngx-sentry/src/lib/sentry.interceptor.ts
Cara lain adalah dengan membuat objek event Sentry sendiri dan menggunakan metode captureEvent(event: SentryEvent)
untuk mengirimkannya ke Sentry.
Semoga ini membantu. 🙂.
Terima kasih @pascaliske
Saya sebenarnya menyelesaikannya dengan menggunakan captureMessage(message: string)
yang Anda sebutkan.
Ini akan sangat membantu bagi pengunjung masa depan :)
Menutup masalah ini karena tampaknya telah diselesaikan.
Komentar yang paling membantu
@Taewa Objek kesalahan yang dilemparkan oleh Angular tidak dalam format yang sama dengan
SentryEvent
.Salah satu caranya adalah dengan menggunakan
captureMessage(message: string)
dengan beberapa info kesalahan. Itulah cara sederhana yang saya pilih juga: https://github.com/pascaliske/ngx-sentry/blob/master/projects/ngx-sentry/src/lib/sentry.interceptor.tsCara lain adalah dengan membuat objek event Sentry sendiri dan menggunakan metode
captureEvent(event: SentryEvent)
untuk mengirimkannya ke Sentry.Semoga ini membantu. 🙂.