Sentry-javascript: Nonaktifkan penjaga di lingkungan dev saat menggunakan plugin sudut

Dibuat pada 17 Des 2015  ·  15Komentar  ·  Sumber: getsentry/sentry-javascript

Saat ini tidak mungkin untuk menonaktifkan plugin penjaga karena modul ngRaven gagal dimuat.

Pada lingkungan pengembangan saya menggunakan yang berikut ini tanpa menyediakan DSN
Raven.config().install()

Panggilan balik yang mendaftarkan penyedia gagak tidak disebut

Raven.addPlugin(function () {
    angular.module('ngRaven', [])
        .provider('Raven',  RavenProvider)
        .config(['$provide', ExceptionHandlerProvider]);
});

Karena fungsi instal tidak memanggil plugin yang menginstal modul
isSetup() gagal karena globalServer adalah null

install: function() {
    if (isSetup() && !isRavenInstalled) {
        TraceKit.report.subscribe(handleStackInfo);

        // Install all of the plugins
        each(plugins, function(_, plugin) {
            plugin();
        });

        isRavenInstalled = true;
    }

    return Raven;
},

Komentar yang paling membantu

Saya memiliki permintaan serupa dari @benvinegar dan dia menunjukkan bahwa Anda dapat menggunakan:

Raven.config('your dsn', {
  shouldSendCallback: function () {
    return false;
  }
}).install();

Dan itu akan menghentikan Raven untuk melapor. Ganti status return ke TRUE dan itu akan mulai melaporkan. Setidaknya ini adalah apa yang saya telah diberitahu. Kami berencana untuk menggunakan ini plus perintah penyebaran sed untuk membalik boolean pada waktu penerapan.

Semua 15 komentar

Terkait dengan #414 dan #413

@Sija @odedfos – dapatkah Anda mengomentari #414? Seperti, apakah PR itu akan mengatasi masalah ini?

@benvinegar tampaknya sah untuk saya, meskipun saya dapat membayangkan kasus di mana Anda ingin penyedia Raven tersedia, bahkan tanpa memanggil .config() — seperti mengatur bendera Raven.debug misalnya

Saya memiliki permintaan serupa dari @benvinegar dan dia menunjukkan bahwa Anda dapat menggunakan:

Raven.config('your dsn', {
  shouldSendCallback: function () {
    return false;
  }
}).install();

Dan itu akan menghentikan Raven untuk melapor. Ganti status return ke TRUE dan itu akan mulai melaporkan. Setidaknya ini adalah apa yang saya telah diberitahu. Kami berencana untuk menggunakan ini plus perintah penyebaran sed untuk membalik boolean pada waktu penerapan.

Saya melakukan sesuatu yang mirip dengan di atas untuk memungkinkan install() berhasil, dan untuk menghindari membuat permintaan http apa pun untuk benar-benar mengirim kesalahan ( window.SERVER_FLAGS adalah cara saya meneruskan sentryURL saya dari backend ke frontend).

if (!window.SERVER_FLAGS.sentryURL) {
  // Never bother sending data to sentry
  Raven.setShouldSendCallback(function() { return false });
  // Allow Raven.install() to succeed
  Raven.isSetup = function() {
    return true;
  }
}
Raven
.config(window.SERVER_FLAGS.sentryURL, {
  release: window.SERVER_FLAGS.version,
  debug: true,
})
.addPlugin(Raven.Plugins.Angular)
.install();

Ini tampaknya bekerja dengan cukup baik, dan masih memungkinkan Raven berjalan, tetapi tidak melaporkan. Saya benar-benar tidak suka harus meretas isSetup tetapi ini satu-satunya cara saya dapat menemukan bahwa itu minimal invasif untuk memuat ngRaven .

Untuk orang lain yang menemukan ini

Jika Anda menggunakan webpack untuk membangun aplikasi Anda, Anda menggunakan variabel lingkungan untuk mengonfigurasi gagak dengan menggunakan plugin lingkungan

https://webpack.js.org/plugins/environment-plugin/

misalnya

if (process.env.NODE_ENV === 'dev') {
  Raven.setShouldSendCallback(() => { return false; });
  Raven.isSetup = () => { return true; };
}

Raven
  .config(process.env.RAVEN_DSN, {
    debug: process.env.RAVEN_DEBUG,
  })
  .addPlugin(require('raven-js/plugins/angular'), angular)
  .install();

isSetup sekarang hanya-baca, jadi metode di atas tidak lagi berfungsi.

Saya menemukan solusi berikut, yang tampaknya berhasil, meskipun saya tidak tahu mengapa.

let isProduction = process.env.ENV === 'build'; // variable provided by webpack

Raven
.config('https://<key>@sentry.io/<project>', {
  shouldSendCallback: function () {
    return isProduction;
  }
})
.install();

if (!isProduction) {
  Raven.uninstall(); // this is necessary! for some reason
}

export class RavenErrorHandler implements ErrorHandler {
  handleError(err: any): void {
    console.error(err); // this still fires after uninstalling!!! it's because it's already listed as Angular provider 
    Raven.captureException(err)
  }
}

Ini masih merupakan solusi yang buruk karena membajak semua kesalahan saya jadi saya tidak tahu dari baris mana mereka dilemparkan. Setidaknya saya kira itu tidak seburuk tidak melihat mereka sama sekali.

Saya telah menggunakan cara ini. Sepertinya bekerja untuk saya

`jika (lingkungan.produksi) {
Raven.config('https://@sentry.io/')
.Install();
}

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

Tolong beri tahu saya jika saya melakukan sesuatu yang salah di sini.

Terlihat baik-baik saja bagi saya. Rupanya, masalah asli sudah dijawab di sini, jadi tutup yang ini. Jangan ragu untuk membuka kembali jika masih relevan dengan cara apa pun.

Lebih mudah di 'app.module.ts'

import {environment} from '../environments/environment';
...
    providers: [
    LocalStorageService,
    EventLocalStorageService,
    EventService,
    ActionButtonService,
    WeatherUndergroundWeatherService,
    GeoLocationInfoService,
    AppEventColorService,
    // {provide: ErrorHandler, useClass: RavenErrorHandler}
    {provide: ErrorHandler, useClass: environment.production ? RavenErrorHandler : ErrorHandler} // See here
  ],

dan

  .config('key', {
    shouldSendCallback: function () {
      return environment.production;
    }
  })
  .install();

Dengan cara ini Anda memiliki pesan localdev di konsol Anda (jika tidak, Sentry mengambil beberapa) dan pada produksi Anda mendapatkan yang Anda inginkan

Setidaknya di Chrome (tidak yakin tentang browser lain), cara lain untuk mencegah Raven dari "membajak" konsol dev adalah dengan blackbox raven.js :

https://Gist.github.com/paulirish/c307a5a585ddbcc17242
https://developer.chrome.com/devtools/docs/blackboxing

2018-05-11_12-45-12

Dan bagaimana dengan Sentri? Saya tidak menggunakan Raven, saya memiliki Sentry dan saya ingin menonaktifkannya di lingkungan pengembangan di localhost saya.

https://dev.to/angular/tracking-errors-in-angular-with-sentry-4oo0 — ini dia

@artuska Anda dapat memberikan DSN kosong atau menggunakan beforeSend untuk menghentikan transportasi.

Sentry.init({
  dsn: process.env.development ? '' : 'your-real-dsn'
})

atau

Sentry.init({
  dsn: 'your-real-dsn',
  beforeSend(event) {
    if (process.env.development) return null;
    return event;
  }
})

Saya tidak berpikir itu benar-benar menonaktifkan Sentry. Itu hanya berhenti jika dari mengirim
data. Masih remah roti membungkus sebagian besar masalah yang menyebalkan

Pada Mon, 9 Desember 2019 di 10:15 Kamil Ogórek [email protected]
menulis:

@artuska https://github.com/artuska Anda dapat memberikan DSN kosong atau
gunakan beforeSend untuk menghentikan transportasi.

Penjaga.init({
dsn: proses.env.pengembangan ? '' : 'Anda-asli-dsn'
})

atau

Penjaga.init({
dsn: 'dsn-asli-Anda',
sebelumKirim(acara) {
if (process.env.development) mengembalikan null;
acara kembali;
}
})


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/getsentry/sentry-javascript/issues/436?email_source=notifications&email_token=AAJVX45ZEIJWZSXZSBQ5ZQLQXYECDA5CNFSM4BW42VRKYY3PNVWWK3TUL52HS4DFVREXG43VMZ2VBW63LNMVX
atau berhenti berlangganan
https://github.com/notifications/unsubscribe-auth/AAJVX4YBWA3R6SM63NV5JPDQXYECDANCNFSM4BW42VRA
.

@jimmykane benar, jika Anda ingin menonaktifkan Sentry, panggil saja init syarat

Apakah halaman ini membantu?
0 / 5 - 0 peringkat