Sentry-javascript: Deaktivieren Sie die Wache in der Entwicklungsumgebung, wenn Sie das Winkel-Plugin verwenden

Erstellt am 17. Dez. 2015  ·  15Kommentare  ·  Quelle: getsentry/sentry-javascript

Im Moment ist es nicht möglich, das Sentry-Plugin zu deaktivieren, da das ngRaven-Modul nicht geladen werden kann.

Auf der Entwicklungsumgebung verwende ich Folgendes ohne Angabe des DSN
Raven.config().install()

Der Rückruf, der den Rabenanbieter registriert, wird nicht angerufen

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

Weil die install-Funktion nicht das Plugin aufruft, das das Modul installiert
isSetup() ist fehlgeschlagen, weil globalServer null ist

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

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

        isRavenInstalled = true;
    }

    return Raven;
},

Hilfreichster Kommentar

Ich hatte eine ähnliche Anfrage von @benvinegar und er wies darauf hin, dass Sie

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

Und das wird Raven von der Berichterstattung abhalten. Ändern Sie den Status von return auf TRUE und es beginnt mit der Berichterstellung. Zumindest wurde mir das gesagt. Wir planen, dies plus einen Bereitstellungsbefehl sed zu verwenden, um den Booleschen

Alle 15 Kommentare

Bezogen auf #414 und #413

@Sija @odedfos – kannst du #414 kommentieren? Wird diese PR dieses Problem angehen?

@benvinegar scheint für mich legitim zu sein, obwohl ich mir einen Fall vorstellen könnte, in dem Sie möchten, dass der Anbieter Raven verfügbar ist, auch ohne .config() anzurufen – wie zum Beispiel das Setzen des Flags Raven.debug

Ich hatte eine ähnliche Anfrage von @benvinegar und er wies darauf hin, dass Sie

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

Und das wird Raven von der Berichterstattung abhalten. Ändern Sie den Status von return auf TRUE und es beginnt mit der Berichterstellung. Zumindest wurde mir das gesagt. Wir planen, dies plus einen Bereitstellungsbefehl sed zu verwenden, um den Booleschen

Ich habe etwas Ähnliches wie oben gemacht, um install() erfolgreich zu machen und um zu vermeiden, dass HTTP-Anfragen gesendet werden, um die Fehler tatsächlich zu senden ( window.SERVER_FLAGS übergebe meine SentryURL von meinem Backend an das 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();

Dies scheint ziemlich gut zu funktionieren und lässt Raven immer noch laufen, aber es meldet sich einfach nicht. Ich mag es wirklich nicht, isSetup hacken zu müssen, aber das ist der einzige Weg, den ich finden konnte, der minimal invasiv war, um ngRaven laden.

Für andere, die darüber stolpern

Wenn Sie Webpack zum Erstellen Ihrer Anwendung verwenden, verwenden Sie Umgebungsvariablen, um raven mithilfe des Umgebungs-Plugins zu konfigurieren

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

z.B

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 ist jetzt schreibgeschützt, sodass die obige Methode nicht mehr funktioniert.

Ich habe eine folgende Problemumgehung gefunden, die zu funktionieren scheint, obwohl ich keine Ahnung habe, warum.

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)
  }
}

Es ist immer noch eine schreckliche Lösung, weil es alle meine Fehler entführt, sodass ich nicht weiß, aus welcher Zeile sie geworfen wurden. Zumindest finde ich es nicht so schlimm, sie gar nicht zu sehen.

Ich habe diesen Weg verwendet. Bei mir scheint es zu funktionieren

`if (Umwelt.Produktion) {
Raven.config('https://@sentry.io/')
.Installieren();
}

und bei Anbietern
Anbieter: [Umwelt.Produktion ? { bereitstellen: ErrorHandler, useClass: RavenErrorHandler } : [], ...`

Bitte lassen Sie mich wissen, wenn ich hier etwas falsch mache.

Sieht gut aus für mich. Anscheinend wurde das ursprüngliche Problem hier bereits beantwortet, also schließe ich dieses. Fühlen Sie sich frei, wieder zu öffnen, wenn es in irgendeiner Weise noch relevant ist.

Einfacher unter '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
  ],

und

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

Auf diese Weise haben Sie die localdev-Nachrichten in Ihrer Konsole (sonst schnappt sich Sentry einige) und bei der Produktion erhalten Sie die, die Sie haben möchten

Zumindest in Chrome (bei anderen Browsern bin ich mir nicht sicher) besteht eine weitere Möglichkeit, um zu verhindern, dass Raven die Entwicklerkonsole "entführt", darin, raven.js zu blackboxen:

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

2018-05-11_12-45-12

Und was ist mit Sentry? Ich verwende Raven nicht, ich habe Sentry und möchte es in der Entwicklungsumgebung auf meinem localhost deaktivieren.

https://dev.to/angular/tracking-errors-in-angular-with-sentry-4oo0 — hier ist es

@artuska können Sie entweder einen leeren DSN beforeSend , um den Transport anzuhalten .

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

oder

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

Ich glaube nicht, dass das Sentry tatsächlich deaktiviert. Es stoppt nur, wenn es nicht gesendet wird
Daten. Immer noch umhüllt das Breadcrumbs die meisten Probleme, was scheiße ist

Am Mo, 09.12.2019 um 10:15 Uhr Kamil Ogórek [email protected]
schrieb:

@artuska https://github.com/artuska Sie können entweder leeres DSN angeben oder
Verwenden Sie beforeSend, um den Transport anzuhalten.

Sentry.init({
dsn: process.env.entwicklung ? '' : 'dein-real-dsn'
})

oder

Sentry.init({
dsn: 'deine-echte-dsn',
vorSend(Ereignis) {
if (process.env.development) return null;
Rückkehrereignis;
}
})


Sie erhalten dies, weil Sie einen Kommentar abgegeben haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/getsentry/sentry-javascript/issues/436?email_source=notifications&email_token=AAJVX45ZEIJWZSXZSBQ5ZQLQXYECDA5CNFSM4BW42VRKYY2PNVWWK3TUL52HS4DFVREXG43VMVBW63LNmentY
oder abmelden
https://github.com/notifications/unsubscribe-auth/AAJVX4YBWA3R6SM63NV5JPDQXYECDANCNFSM4BW42VRA
.

@jimmykane richtig, wenn du Sentry deaktivieren willst, ruf einfach init bedingt an

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen