Sentry-javascript: So protokollieren Sie Ausnahmen (`captureException`) auch in der Konsole

Erstellt am 30. Sept. 2018  ·  17Kommentare  ·  Quelle: getsentry/sentry-javascript

Wenn ich lokal entwickle, deaktiviere ich das Senden von Fehlern an Sentry, aber ich möchte trotzdem, dass diese Fehler in meiner Konsole angezeigt werden, damit ich sie beheben kann.

Gibt es eine Möglichkeit, das Senden von Ausnahmen/Ereignissen an Sentry zu deaktivieren, sie aber trotzdem in der Konsole zu protokollieren?

Hilfreichster Kommentar

@gaastonsr machst du als zweites Argument :) 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;
  }
});

Alle 17 Kommentare

Aus diesem Grund haben wir captureException verpackt:

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

Ich würde sagen, der beste Ansatz wäre die Verwendung von beforeSend
```js
Sentry.init({
dsn: "DSN",
vorSend: event => {
if (IS_DEBUG) {
Konsole.Fehler(Ereignis);
null zurückgeben; // Dies verwirft das Ereignis und es wird nichts an die Wache gesendet
}
Rückkehrereignis;
}
});

Was mir an der Verwendung von beforeSend nicht gefällt, ist, dass ich nicht das ursprüngliche Fehlerobjekt erhalte. Aber danke für die Antwort.

@gaastonsr machst du als zweites Argument :) 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, das ändert alles! Danke, @kamilogorek.

Ich habe 30 Minuten gebraucht, um herauszufinden, warum meine Konsole keine Fehler protokolliert. Dies sollte einfacher sein.

Das Problem dabei ist, dass wir es standardmäßig auch als Breadcrumb erfassen würden, wenn wir es standardmäßig protokollieren würden. Und das tun wir bereits bei Erfassungsfehlern. Dadurch würden doppelte Einträge erstellt.
Obwohl meine Ohren für das Feedback voll geöffnet sind und jemand eine Idee hat, wie dieser Teil der Dokumentation verbessert werden kann, würde ich ihn gerne aufnehmen :)

Das Problem dabei ist, dass wir es standardmäßig auch als Breadcrumb erfassen würden, wenn wir es standardmäßig protokollieren würden. Und das tun wir bereits bei Erfassungsfehlern. Dadurch würden doppelte Einträge erstellt.
Obwohl meine Ohren für das Feedback voll geöffnet sind und jemand eine Idee hat, wie dieser Teil der Dokumentation verbessert werden kann, würde ich ihn gerne aufnehmen :)

Es ist wirklich ein unerwartetes Verhalten, dass Sentry Fehler abfängt und sie nicht in der Konsole anzeigt!
Ich habe auch eine Stunde damit verbracht herauszufinden, warum meine App nicht funktioniert, obwohl die Konsole klar ist.
Dies sollte auf jeden Fall geändert werden.

Ich denke, Sie können Fehler aus dem Breadcrumb auf der Serverseite herausfiltern.
Oder loggen Sie es vielleicht in der Konsole in setTimeout Callback ein, damit Breadcrumbs bereits erfasst werden. So wie ich es derzeit mache:

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

@vitalets es wurde in 5.9.0 geändert. Sie werden jetzt auch Fehler in der Konsole sehen.

@vitalets es wurde in 5.9.0 geändert. Sie werden jetzt auch Fehler in der Konsole sehen.

@kamilogorek
Es funktioniert bei mir nicht auf sentry/browser 5.9.1 (Chrome 78, osx).
Hier sind die Codes:

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

Die Konsole ist leer. Die Registerkarte "Netzwerk" zeigt an, dass der Fehler an den Wachdienst gesendet wurde.

Ohne Sentry-Fehler wird angezeigt:

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

image

es wird für captureException protokolliert, nicht für das Capture-Ereignis:
Um sich einzuloggen captureEvent und captureException wir leicht modifiziert , die @kamilogorek ‚s Lösung:

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 ist es auch die Standardeinstellung für das Paket @sentry/node ? Ich habe die Version 5.9.0 und sehe, dass die Funktion beforeSend aufgerufen wird, aber ich sehe nichts in der Konsole protokolliert.

Ich sehe auch keine Fehler auf der Konsole mit 5.10.1. Logging würde ausreichen, wenn debug auf true gesetzt ist.

Das passiert, wenn Sie die Spezifikationen nicht bis zum Ende lesen ...

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

Wenn die spezielle Fehlerereignisbehandlung wahr ist
Wenn der Rückgabewert wahr ist, dann setzen Sie das abgebrochene Flag des Ereignisses.
Andernfalls
Wenn der Rückgabewert false ist, dann setzen Sie das abgebrochene Flag des Ereignisses.

Und dann scrollst du...

Aus historischen Gründen gibt es zwei Ausnahmen in der Plattform:
Die onerror-Handler für globale Objekte, bei denen die Rückgabe von true das Ereignis abbricht

Ich werde den Code entsprechend aktualisieren

Das passiert, wenn Sie die Spezifikationen nicht lesen

Niemand liest Spezifikationen bis zum Ende :)

Vielen Dank für die Korrektur!

Wenn ich diesen Thread richtig lese, sollte die aktuelle Version von Sentry Fehler in der Konsole anzeigen und gleichzeitig an das Sentry-Dashboard senden. Ich erlebe dieses Verhalten nicht.

So lade ich Sentry in meine Seite:

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

Hier ist mein Initialisierungsaufruf:

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

Ich habe den folgenden Fehler beim Erstellen einer Zeile hinzugefügt:

 window.undef.undef += 1;

Wenn ich die Seite lade und die Fehlerzeile auslöse, wird in der Konsole nichts angezeigt, aber ich sehe den Fehler im Sentry-Dashboard. Wenn ich den Sentry.init Aufruf auskommentiere, sehe ich ein TypeError in der js-Konsole.

Ich habe aufgrund meiner Lektüre dieses Threads erwartet, dass ich den Fehler in der js-Konsole sehen würde, während ich ihn auch im Sentry-Dashboard protokolliere. Ist das nicht richtig? Muss ich trotzdem den beforeSend Hook verwenden?

Mir ist jetzt klar, dass ich logErrors: true an den Integrations.Vue Aufruf übergeben muss:

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

Entschuldigung, ich hätte die Dokumentation genauer lesen sollen!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen