Sentry-javascript: Für Entwicklung deaktivieren

Erstellt am 3. Mai 2013  ·  19Kommentare  ·  Quelle: getsentry/sentry-javascript

Ich habe Probleme herauszufinden, wie ich das window.onerror -Ereignis wiederherstellen kann, nachdem ich Raven als AMD-Abhängigkeit eingeschlossen habe.

Ich möchte Raven während der Entwicklung überhaupt nicht verwenden, daher rufe ich im Produktionsmodus nur config() / install() auf. Aber im Dev-Modus werden immer noch alle Fehler von TraceKit.report() geworfen ... Was ziemlich frustrierend ist, da die Datei/Zeilennummer/Stack-Trace in den Browser-Dev-Tools nicht mehr hilfreich ist.

Ich habe versucht, uninstall() im Entwicklermodus anzurufen, aber das hat nicht geholfen. Gibt es einen Grund, warum Sie sich an window.onerror binden, egal was passiert, anstatt es innerhalb config() oder install() zu tun?

Hilfreichster Kommentar

Für diejenigen, die hierher kommen und versuchen, es immer noch herauszufinden, es war eine Konfigurationsoption, die ich zuerst vermisst habe 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();

Wenn shouldSendCallback gleich false ist, meldet sich die Wache nicht. Damit ist keine bedingte Berichtslogik in Ihrem Code erforderlich 👍 .

Alle 19 Kommentare

Lösung gefunden, aber nicht optimal...

Ich habe versucht, window.onerror = null manuell in den Entwicklermodus zu setzen, aber selbst das hat nicht funktioniert. Das Problem war, dass ich Raven require() in ein paar Modulen eingebunden habe und Raven sich jedes Mal neu an window.onerror gebunden hat.

Also habe ich stattdessen aufgehört, noConflict() zu verwenden, es als globale Abhängigkeit in die requirejs-Konfiguration aufgenommen und als lokale Abhängigkeit von den anderen Modulen entfernt. Dadurch konnte window.onerror = null gesetzt werden, ohne dass Raven das Ereignis später erneut binden musste.

Ziemlich unsaubere Lösung aber :(

@adambiggs Eine andere Lösung besteht darin, ein Wrapping-AMD-Modul für Raven-js zu erstellen, das den Konfigurations- und Installationsaufruf ausführt, was bedeutet, dass Sie raven-js nur einmal importieren, aber Ihr eigenes Modul mehrmals importieren können, afaik.

Ich denke, dies könnte zusammenhängen mit: https://github.com/getsentry/raven-js/pull/109 und https://github.com/getsentry/raven-js/issues/91#issuecomment -15560074

Dies sollte nicht mehr relevant sein. window.onerror wird erst beim Aufruf install() mutiert und beim Aufruf uninstall() wiederhergestellt. Lassen Sie mich wissen, wenn es ein anderes Problem gibt.

@mattrobenolt , ich habe auf 1.1.11 aktualisiert und rufe nicht install() an und ich habe immer noch Fehler bei der Handhabung von Raven.

@bobbyrenwick Kannst du mich mit etwas Öffentlichem verlinken, das dies zeigt?

Gibt es dafür eine Problemumgehung? Selbst wenn ich niemals Raven.config() oder Raven.install() aufrufe oder wenn ich Raven.config(false) aufrufe, scheinen die jquery- oder onerror-Handler noch installiert zu sein. Die einzige Problemumgehung scheint darin zu bestehen, das Raven-js überhaupt nicht zu laden (was alles andere als ideal ist).

Siehe: #282 :)

Stellen Sie #282 nur als Hintergrund bereit? Ich sehe da keine Workarounds.

Ja, denn es gibt noch keine Lösung.

Meine einzige Lösung besteht darin, require() in einem if -Block zu verwenden (der Rest meines Codes verwendet jetzt import :(

Gibt es hierzu ein Update?

Irgendein Update? Es funktioniert IMMER NOCH nicht richtig.

EDIT: Sorry für meinen Ton. Hatte einen langen Tag.

Was versuchst du zu machen? Ich mache das, was gut funktioniert:

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

Wobei process.env.RAVEN_DSN natürlich der DSN ist, und der nur gesetzt wird, wenn für Umgebungen gebaut wird, in denen Raven laufen soll, über webpack.EnvironmentPlugin .

In Ihrer Version ist es unmöglich, einen Angular ErrorHandler bedingt einzurichten. Entweder Sie richten es auf jeden Fall ein, und dann schluckt es Ihre Fehler, egal was, oder listen es aber trotzdem nicht in den Anbietern auf, die oder das Dev das gesamte Modul zum Absturz bringt.

Soweit ich weiß, ist es unmöglich, einen Angular-Anbieter basierend auf einer Bedingung zu verwenden oder nicht zu verwenden.

Ich habe heute viele Iterationen von Reparaturversuchen durchgeführt.

Um ehrlich zu sein, klingt das für mich eher nach einem Angular-Problem als nach einem Raven-Problem.

Allerdings stimme ich zu, dass eine allgemeinere Lösung eine gute Ergänzung wäre.

Nur ein Gedanke: Haben Sie versucht, ein Muster in der Option ignoreUrls festzulegen , das mit allen URLs übereinstimmt? Würde das tun, was Sie brauchen? Etwas wie ignoreUrls: [/./] ?

Oder vielleicht sampleRate auf Null setzen?

Es ist möglich, Raven daran zu hindern, Anfragen zu senden und sogar Fehler abzufangen, aber das hindert den Angular ErrorHandler nicht daran, Fehler zu schlucken (= zumindest den Überblick über die tatsächlichen Zeilen zu verlieren, von denen Fehler geworfen wurden).

Ich nehme an, Sie haben recht, und es ist schließlich kein großes Raven-Problem.

Für diejenigen, die hierher kommen und versuchen, es immer noch herauszufinden, es war eine Konfigurationsoption, die ich zuerst vermisst habe 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();

Wenn shouldSendCallback gleich false ist, meldet sich die Wache nicht. Damit ist keine bedingte Berichtslogik in Ihrem Code erforderlich 👍 .

Machen Sie Ihren DSN zur leeren Zeichenfolge. Es wird die Berichterstattung deaktivieren

Ich habe auf diese Weise verwendet. Es scheint für mich zu funktionieren

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

und bei Anbietern
providers: [environment.production ? { provide: ErrorHandler, useClass: RavenErrorHandler } : [], ...

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen