Sentry-javascript: Bagaimana saya bisa mendeteksi kesalahan jaringan klien melalui @sentry/browser?

Dibuat pada 19 Des 2018  ·  3Komentar  ·  Sumber: getsentry/sentry-javascript

Paket + Versi

  • [o] @sentry/browser
  • [x] @sentry/node
  • [ ] raven-js
  • [x] raven-node _(gagak untuk simpul)_
  • [ ] lainnya: Angular6 + Ngrx6

Versi: kapan:

@sentry/browser": "4.4.2"

Keterangan

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.

  1. @sentry/browser dimaksudkan untuk menangkap kesalahan jaringan klien?
  2. Jika 1 benar, bagaimana saya bisa membuatnya bekerja? (Semoga cara Sudut)
  3. Jika 2 salah, apakah kesalahan jaringan harus ditangani oleh backend?

Terima kasih!

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.ts

Cara lain adalah dengan membuat objek event Sentry sendiri dan menggunakan metode captureEvent(event: SentryEvent) untuk mengirimkannya ke Sentry.

Semoga ini membantu. 🙂.

Semua 3 komentar

@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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat