Sentry-javascript: Cara mencatat pengecualian (`captureException`) ke konsol juga

Dibuat pada 30 Sep 2018  ·  17Komentar  ·  Sumber: getsentry/sentry-javascript

Ketika saya mengembangkan secara lokal, saya menonaktifkan kesalahan pengiriman ke Sentry tetapi saya masih ingin kesalahan itu ditampilkan di konsol saya sehingga saya dapat memperbaikinya.

Apakah ada cara untuk menonaktifkan pengiriman pengecualian/acara ke Sentry tetapi masih mencatatnya ke konsol?

Komentar yang paling membantu

@gaastonsr Anda lakukan sebagai argumen kedua :) https://docs.sentry.io/learn/filtering/?platform=browser#before -send

Sentry.init({
  dsn: "DSN",
  beforeSend: (event, hint) => {
   if (IS_DEBUG) {
     console.error(hint.originalException || hint.syntheticException);
     return null; // this drops the event and nothing will be sent to sentry
   }
   return event;
  }
});

Semua 17 komentar

kami membungkus captureException karena alasan itu:

function captureException(...args) {
    if (typeof Sentry !== 'undefined') {
        Sentry.captureException(...args);
    }
    else {
        console.error(...args);
    }
}

Saya akan mengatakan pendekatan terbaik akan menggunakan beforeSend
```js
Penjaga.init({
dsn: "DSN",
sebelumKirim: acara => {
jika (IS_DEBUG) {
console.error(peristiwa);
kembali nol; // ini membatalkan acara dan tidak ada yang akan dikirim ke penjaga
}
acara kembali;
}
});

Apa yang saya tidak suka tentang menggunakan beforeSend adalah bahwa saya tidak mendapatkan objek kesalahan asli. Tapi terima kasih atas jawabannya.

@gaastonsr Anda lakukan sebagai argumen kedua :) https://docs.sentry.io/learn/filtering/?platform=browser#before -send

Sentry.init({
  dsn: "DSN",
  beforeSend: (event, hint) => {
   if (IS_DEBUG) {
     console.error(hint.originalException || hint.syntheticException);
     return null; // this drops the event and nothing will be sent to sentry
   }
   return event;
  }
});

Omg, ini mengubah segalanya! terima kasih @kamilogorek.

Butuh waktu 30 menit bagi saya untuk menemukan mengapa konsol saya tidak mencatat kesalahan. Ini seharusnya lebih mudah dilakukan.

Masalahnya di sini adalah jika kita mencatatnya secara default, kita juga akan menangkapnya sebagai remah roti secara default. Dan kami sudah melakukan ini untuk menangkap kesalahan. Jadi itu akan membuat entri duplikat.
Meskipun telinga saya sepenuhnya terbuka untuk umpan balik dan jika seseorang memiliki ide bagaimana meningkatkan bagian dokumen ini, saya akan dengan senang hati memasukkannya :)

Masalahnya di sini adalah jika kita mencatatnya secara default, kita juga akan menangkapnya sebagai remah roti secara default. Dan kami sudah melakukan ini untuk menangkap kesalahan. Jadi itu akan membuat entri duplikat.
Meskipun telinga saya sepenuhnya terbuka untuk umpan balik dan jika seseorang memiliki ide bagaimana meningkatkan bagian dokumen ini, saya akan dengan senang hati memasukkannya :)

Benar-benar perilaku yang tidak terduga bahwa penjaga menangkap kesalahan dan tidak menampilkannya di konsol!
Saya juga menghabiskan satu jam untuk mencari tahu mengapa aplikasi saya tidak berfungsi meskipun konsolnya jelas.
Ini pasti harus diubah.

Saya pikir Anda dapat menyaring kesalahan dari remah roti di sisi server.
Atau mungkin log ke konsol di setTimeout callback, jadi remah roti sudah ditangkap. Seperti yang saya lakukan saat ini:

Sentry.init({
  dsn: 'DSN',
  beforeSend: (event, hint) => {
    setTimeout(() => console.error(hint.originalException || hint.syntheticException), 0);
    return event;
  }
});

@vitalets telah diubah di 5.9.0 . Anda juga akan melihat kesalahan di konsol sekarang.

@vitalets telah diubah di 5.9.0 . Anda juga akan melihat kesalahan di konsol sekarang.

@kamilogorek
Ini tidak berfungsi untuk saya di sentry/browser 5.9.1 (chrome 78, osx).
Berikut kodenya:

Sentry.init({  dsn: 'dsn' });
setTimeout(() => {throw new Error('abc')}, 3000);

Konsolnya kosong. Tab jaringan menunjukkan bahwa kesalahan telah dikirim ke penjaga.

Tanpa kesalahan penjaga ditampilkan:

// Sentry.init({  dsn: 'dsn' });
setTimeout(() => {throw new Error('abc')}, 3000);

image

itu log untuk captureException bukan untuk acara capture:
Untuk mencatat captureEvent dan captureException kami sedikit memodifikasi solusi @kamilogorek :

Sentry.init({
  dsn: "DSN",
  beforeSend: (event, hint) => {
   if (IS_DEBUG) {
     console.error(hint.originalException || hint.syntheticException || event);
     return null; // this drops the event and nothing will be sent to sentry
   }
   return event;
  }
});

@kamilogorek apakah ini default untuk paket @sentry/node juga? Saya memiliki versi 5.9.0 dan saya melihat fungsi beforeSend dipanggil tetapi saya tidak melihat apa pun yang dicatat di konsol.

Saya juga tidak melihat kesalahan pada konsol dengan 5.10.1. Logging akan cukup jika debug disetel ke true.

Inilah yang terjadi ketika Anda tidak membaca spesifikasi sampai akhir ...

https://html.spec.whatwg.org/multipage/webappapis.html#the -event-handler-processing-algorithm

Jika penanganan acara kesalahan khusus benar
Jika nilai yang dikembalikan benar, maka setel bendera acara yang dibatalkan.
Sebaliknya
Jika nilai yang dikembalikan salah, maka setel bendera acara yang dibatalkan.

Dan kemudian Anda menggulir ...

Ada dua pengecualian di platform, karena alasan historis:
Penangan onerror pada objek global, di mana mengembalikan true membatalkan acara

Saya akan memperbarui kode yang sesuai

Inilah yang terjadi jika Anda tidak membaca spesifikasi

Tidak ada yang membaca spesifikasi sampai akhir :)

Terima kasih atas perbaikannya!

Jika saya membaca utas ini dengan benar maka rilis penjaga saat ini akan menunjukkan kesalahan di konsol sambil juga mengirimkannya ke dasbor penjaga. Saya tidak mengalami perilaku ini.

Inilah cara saya memuat penjaga ke halaman saya:

<script src="https://browser.sentry-cdn.com/5.20.1/bundle.min.js" integrity="sha384-O8HdAJg1h8RARFowXd2J/r5fIWuinSBtjhwQoPesfVILeXzGpJxvyY/77OaPPXUo" crossorigin="anonymous"></script>
<script src="https://browser.sentry-cdn.com/5.20.1/vue.min.js" crossorigin="anonymous"></script>

Inilah panggilan inisialisasi saya:

  Sentry.init({
    dsn: 'https://_________.ingest.sentry.io/___________',
    integrations: [new Sentry.Integrations.Vue({Vue, attachProps: true})],
  });

Saya telah menambahkan baris penghasil kesalahan berikut:

 window.undef.undef += 1;

Ketika saya memuat halaman dan memicu baris kesalahan, tidak ada yang muncul di konsol, tetapi saya melihat kesalahan di dasbor penjaga. Jika saya mengomentari panggilan Sentry.init maka saya melihat TypeError di konsol js.

Saya berharap berdasarkan bacaan saya tentang utas ini bahwa saya akan melihat kesalahan di konsol js sambil juga mencatatnya ke dasbor penjaga. Apakah itu tidak benar? Apakah saya masih perlu menggunakan pengait beforeSend ?

Saya menyadari sekarang bahwa saya harus meneruskan logErrors: true ke panggilan Integrations.Vue :

new Sentry.Integrations.Vue({Vue, attachProps: true, logErrors: true}

Maaf, saya seharusnya membaca dokumen lebih dekat!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat