Sentry-javascript: Nonaktifkan untuk pengembangan

Dibuat pada 3 Mei 2013  ·  19Komentar  ·  Sumber: getsentry/sentry-javascript

Saya mengalami kesulitan mencari cara untuk memulihkan acara window.onerror setelah menyertakan Raven sebagai ketergantungan AMD.

Saya tidak ingin menggunakan Raven sama sekali selama pengembangan, jadi saya hanya memanggil config() / install() dalam mode produksi. Tetapi dalam mode dev semua kesalahan masih dilakukan oleh TraceKit.report() ... Yang cukup membuat frustrasi karena file/nomor baris/stack trace tidak membantu lagi di alat dev browser.

Saya sudah mencoba menelepon uninstall() dalam mode dev tetapi itu tidak membantu. Apakah ada alasan Anda mengikat window.onerror apa pun yang terjadi alih-alih melakukannya di dalam config() atau install() ?

Komentar yang paling membantu

Bagi mereka yang datang ke sini mencoba mencari tahu, itu adalah opsi konfigurasi yang saya lewatkan pada awalnya shouldSendCallback :

import Raven from 'raven-js';

const env = 'prod';
const release = '12345';

Raven
  .config('https://<example>@sentry.io/1234', {
    environment: env,
    release: release,
    shouldSendCallback: () => {
      // Do your logic here...
      return ['prod', 'staging'].indexOf(env) !== -1;
    },
  })
  .install();

Jika shouldSendCallback adalah false , penjaga tidak akan melaporkan. Tidak perlu logika pelaporan bersyarat dalam kode Anda dengan ini 👍 .

Semua 19 komentar

Menemukan solusi, tetapi itu tidak ideal ...

Saya mencoba mengatur window.onerror = null secara manual dalam mode dev, tetapi itu pun tidak berhasil. Masalahnya adalah saya require() menggunakan Raven dalam beberapa modul, dan setiap kali Raven mengikat ulang ke window.onerror .

Jadi alih-alih saya berhenti menggunakan noConflict() , memasukkannya sebagai ketergantungan global dalam konfigurasi requirejs, dan menghapusnya sebagai ketergantungan lokal dari modul lain. Ini memungkinkan window.onerror = null disetel tanpa Raven mengikat ulang acara nanti.

Perbaikan yang cukup berantakan :(

@adambiggs Solusi lain adalah membuat modul AMD pembungkus untuk Raven-js yang melakukan panggilan konfigurasi & instal, yang berarti Anda hanya mengimpor raven-js sekali, tetapi dapat mengimpor modul Anda sendiri beberapa kali, afaik.

Saya pikir ini mungkin terkait dengan: https://github.com/getsentry/raven-js/pull/109 dan https://github.com/getsentry/raven-js/issues/91#issuecomment -15560074

Ini seharusnya tidak relevan lagi. window.onerror tidak bermutasi hingga memanggil install() dan dipulihkan saat memanggil uninstall() . Beri tahu saya jika ada masalah lain.

@mattrobenolt , saya telah memutakhirkan ke 1.1.11 dan saya tidak menelepon install() dan saya masih berakhir dengan kesalahan penanganan gagak.

@bobbyrenwick Bisakah Anda menautkan saya ke sesuatu yang publik yang menunjukkan ini terjadi?

Apakah ada solusi untuk ini? Bahkan ketika saya tidak pernah menelepon Raven.config() atau Raven.install() atau jika saya menelepon Raven.config(false) jquery atau penangan onerror tampaknya masih diinstal. Satu-satunya solusi tampaknya tidak pernah memuat raven js di tempat pertama (yang kurang ideal).

Lihat: #282 :)

Apakah Anda memberikan #282 hanya sebagai latar belakang? Saya tidak melihat ada solusi di sana.

Ya, karena belum ada solusi.

Satu-satunya perbaikan saya adalah menggunakan require() di blok if (sisa kode saya sekarang menggunakan import :(

Apakah ada pembaruan tentang ini?

Perubahan apapun? MASIH tidak bekerja dengan benar.

EDIT: Maaf untuk nada saya. Memiliki hari yang panjang.

Apa yang sedang Anda coba lakukan? Saya melakukan ini, yang berfungsi dengan baik:

if (process.env.RAVEN_DSN) {
  require('raven-js').config(process.env.RAVEN_DSN, {
    environment: process.env.NODE_ENV,
  }).install();
}

Di mana process.env.RAVEN_DSN adalah DSN tentu saja, dan yang hanya disetel saat membangun untuk lingkungan tempat saya ingin Raven berjalan, melalui webpack.EnvironmentPlugin .

Dalam versi Anda, tidak mungkin mengatur Angular ErrorHandler secara kondisional. Entah Anda mengaturnya di setiap kasus, dan kemudian menelan kesalahan Anda apa pun yang terjadi, atau tidak, tetapi tetap mencantumkannya di penyedia, yang od dev menyebabkan seluruh modul macet.

Sejauh yang saya tahu tidak mungkin menggunakan atau tidak menggunakan penyedia Angular berdasarkan suatu kondisi.

Saya telah melakukan banyak iterasi upaya perbaikan hari ini.

Sejujurnya itu terdengar seperti masalah Angular daripada masalah Raven.

Karena itu, saya setuju bahwa solusi yang lebih umum akan menjadi tambahan yang bagus.

Sekedar pemikiran: sudahkah Anda mencoba menyetel pola di opsi ignoreUrls yang cocok dengan semua URL? Apakah itu melakukan apa yang Anda butuhkan? Sesuatu seperti ignoreUrls: [/./] ?

Atau mungkin setel sampleRate ke nol?

Dimungkinkan untuk mencegah Raven mengirim permintaan dan bahkan menangkap kesalahan, tetapi itu tidak menghentikan Angular ErrorHandler dari menelan kesalahan (= setidaknya kehilangan jejak garis aktual dari tempat kesalahan dilemparkan).

Saya kira Anda benar dan itu bukan masalah Raven.

Bagi mereka yang datang ke sini mencoba mencari tahu, itu adalah opsi konfigurasi yang saya lewatkan pada awalnya shouldSendCallback :

import Raven from 'raven-js';

const env = 'prod';
const release = '12345';

Raven
  .config('https://<example>@sentry.io/1234', {
    environment: env,
    release: release,
    shouldSendCallback: () => {
      // Do your logic here...
      return ['prod', 'staging'].indexOf(env) !== -1;
    },
  })
  .install();

Jika shouldSendCallback adalah false , penjaga tidak akan melaporkan. Tidak perlu logika pelaporan bersyarat dalam kode Anda dengan ini 👍 .

Jadikan DSN Anda sebagai string kosong. Ini akan menonaktifkan pelaporan

Saya telah menggunakan cara ini. Sepertinya bekerja untuk saya

if (environment.production) { Raven.config('https://@sentry.io/') .install(); }

dan di penyedia
providers: [environment.production ? { provide: ErrorHandler, useClass: RavenErrorHandler } : [], ...

Tolong beri tahu saya jika saya melakukan kesalahan di sini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat