Fangen Sie alle JavaScript-Fehler ab und senden Sie sie an den Server

232

Ich habe mich gefragt, ob jemand Erfahrung im Umgang mit JavaScript-Fehlern weltweit hat und diese vom Client-Browser an einen Server sendet.

Ich denke, mein Punkt ist ganz klar. Ich möchte jede Ausnahme, jeden Fehler, jeden Kompilierungsfehler usw., der auf der Clientseite auftritt, kennen und an den Server senden, um sie zu melden.

Ich benutze hauptsächlich MooTools und head.js(für die JS-Seite) und Django für die Serverseite.

Olivier Girardot
quelle
20
Ich verstehe nicht, warum diese Frage unklar ist.
Michael Hilus
3
Zweimal gewählt, um die Frage erneut zu öffnen, aber ohne Glück. Es ist völlig unklar, warum diese Frage als unklar geschlossen wird.
Muhammad Usman
7
@ andrew-barber - wenn so viele Benutzer diese Frage relevant genug finden, um sie zu bewerten, dann liegt das Problem vielleicht bei Ihnen, wenn es Ihnen unklar ist?
Isapir
5
Diese Frage ist nicht nur klar, sie wird auch unterschätzt :)
Teoman shipahi

Antworten:

16

Ich habe Sentry kürzlich in der Produktion getestet und es funktioniert einwandfrei (JS und andere Sprachen wie PHP).

1- Es ist Open Source (Sie können es auf Ihrem eigenen Server installieren) 2- Sie können den kostenlosen Plan verwenden (100 Berichte / Tag)

Oder installieren Sie es auf Ihrem Server: github.com/getsentry

Tarek
quelle
Beachten Sie, dass sie einen unbegrenzten kostenlosen Plan für Bildungseinrichtungen haben
christianvuerings
8
Scheint nicht mehr Open Source zu sein, alle Optionen sind bezahlt?
David Cumps
4
@ DavidCumps Sie bieten immer noch den kostenlosen Service (Testversion), aber Sie erhalten nur 7 Tage Fehlerverlauf oder Sie können ihn auf Ihrem eigenen Server seit seiner Open Source ( github.com/getsentry ) installieren
Tarek
1
Google Tag Manager hat einen Javascript Error Listener, der möglicherweise einen Besuch wert ist, insbesondere wenn Sie bereits GA
Adrian Gunawan
Sie sollten auch TrackJS dafür auschecken . Es ist ein kostenpflichtiger Dienst, aber er bietet eine Menge Kontext darüber, wie der Benutzer beim Debuggen in die Fehlersituation geraten ist. Ich bin einer der Entwickler und habe Tonnen von Fehlern damit behoben :)
Todd Gardner
318

Ich würde window.onerror auschecken

Beispiel:

window.onerror = function(message, url, lineNumber) {  
  //save error and send to server for example.
  return true;
};  

Beachten Sie, dass durch die Rückgabe von true das Auslösen des Standardhandlers verhindert wird und durch die Rückgabe von false der Standardhandler ausgeführt wird.

Mike Lewis
quelle
9
Sie sollten window.onerror vorzugsweise zuweisen, bevor etwas anderes ausgeführt wird. Stellen Sie also sicher, dass es vor allen anderen js-Codes / -Dateien ausgeführt wird, wo immer Sie es ablegen möchten.
Mike Lewis
17
Hinweis: Mozilla empfiehlt: "Beachten Sie, dass einige / viele Fehlerereignisse kein Fenster auslösen. Fehler, Sie müssen speziell darauf achten."
Adam Naylor
88
Ja, ich liebe es, wie es einige / viele sagt , sehr beschreibend - danke Mozilla.
Daniel Mendel
5
Mozilla macht GlobalEventHandlers.onerror verfügbar: developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/…
Roland
1
Was passiert, wenn der Code, der window.onerror selbst verarbeitet, einen Fehler auslöst? Gibt es die Möglichkeit einer Endlosschleife?
Martin Brown
15

Wenn Ihre Website Google Analytics verwendet, können Sie Folgendes tun:

window.onerror = function(message, source, lineno, colno, error) {
  if (error) message = error.stack;
  ga('send', 'event', 'window.onerror', message, navigator.userAgent);
}

Einige Kommentare zum obigen Code:

  • Bei modernen Browsern wird die vollständige Stapelverfolgung protokolliert.
  • Bei älteren Browsern, die den Stack-Trace nicht erfassen, wird stattdessen die Fehlermeldung protokolliert. (Nach meiner Erfahrung meistens frühere iOS-Version).
  • Die Browserversion des Benutzers wird ebenfalls protokolliert, sodass Sie sehen können, welche Betriebssystem- / Browserversionen welche Fehler auslösen. Dies vereinfacht die Priorisierung und das Testen von Fehlern.
  • Dieser Code funktioniert, wenn Sie Google Analytics mit "analyse.js" wie folgt verwenden . Wenn Sie „gtag.js“ verwenden stattdessen wie diese , müssen Sie die letzte Zeile der Funktion optimieren. Siehe hier für Details .

Sobald der Code vorhanden ist, sehen Sie die Javascript-Fehler Ihrer Benutzer folgendermaßen an:

  1. Klicken Sie in Google Analytics auf den BehaviorAbschnitt und dann auf den Top EventsBericht.
  2. Sie erhalten eine Liste der Ereigniskategorien. Klicken Sie window.onerrorin die Liste.
  3. Sie sehen eine Liste mit Javascript-Stack-Traces und Fehlermeldungen. Fügen Sie dem Bericht eine Spalte für die Betriebssystem- / Browserversionen Ihrer Benutzer hinzu, indem Sie auf die Secondary dimensionSchaltfläche klicken und Event Labelin das angezeigte Textfeld eingeben.
  4. Der Bericht sieht wie im folgenden Screenshot aus.
  5. Um die OS / Browser-Zeichenfolgen in besser lesbare Beschreibungen zu übersetzen, kopiere ich sie und füge sie in https://developers.whatismybrowser.com/useragents/parse/ ein.

Geben Sie hier die Bildbeschreibung ein

Martin Omander
quelle
3
Dies fängt nicht alle Fehler ein, sondern versucht nur, Blöcke zu fangen, obwohl es eine coole Sache ist, dies zu erklären, und ich denke nicht, dass Sie Abstimmungen verdienen.
Nick Steele
Danke, Nick! Ich habe meine Antwort mit kampferprobtem Code aktualisiert, der auf meiner Website gut funktioniert und alle Fehler erfasst, nicht nur die, die Sie mit try ... catch fangen.
Martin Omander
2

Versuchen Sie nicht, Dienste von Drittanbietern zu nutzen, sondern versuchen Sie es selbst.

Die Fehlerbehandlungsroutinen können die folgenden Szenarien abfangen:

  1. Nicht gefangener TypeError kann nicht erfasst werden
  2. Nicht gefangener ReferenceError kann nicht erfasst werden, zB: var.click ()
  3. TypeError kann erfasst werden
  4. Syntaxfehler können erfasst werden
  5. ReferenceError kann erfasst werden

So fangen Sie Javascript-Fehler ab:

window.addEventListener('error', function (e) {
  //It Will handle JS errors 
})

So erfassen Sie AngularJS-Fehler:

app.config(function ($provide) {
$provide.decorator('$exceptionHandler', function ($delegate) {
   return function (exception, cause) {
       //It will handle AngualarJS errors
      }
   })
})
Sam Ruben
quelle
0

Auch der Dienst http://jslogger.com kann dabei helfen:

Protokollieren Sie Javascript-Fehler und -Ereignisse in der Cloud

von http://jslogger.com/features :

Von nun an können Sie alle Fehler ausspionieren, die die Benutzererfahrung Ihrer Website beeinträchtigen. Jeder Javascript-Fehler wird abgefangen und zum späteren Debuggen zu Ihnen gebracht.

HAFTUNGSAUSSCHLUSS: nicht mit dem Service / Unternehmen verbunden.

Ivan Kurmanov
quelle
1
503 Service nicht verfügbar
Rax
0

Sie können Atatus ausprobieren - Es ist ein neuer JavaScript-Fehlerverfolgungsdienst zusammen mit Real User Monitoring (RUM) für moderne Webanwendungen.

Wir erfassen nicht nur die Fehler, sondern auch die Benutzerereignisse, die den Fehler ausgelöst haben. Dies gibt Ihnen Schritte, um den Fehler an Ihrem Ende zu reproduzieren.

Neben der Fehlererfassung erfassen wir auch die Ladezeit der Seite und zeigen sie aus verschiedenen Perspektiven an - Geo, Browser, Seiten-Drilldown, Seitenhistogramm, Ajax-Überwachung und Transaktionsüberwachung.

https://www.atatus.com/

Verfügbare Dokumente: https://www.atatus.com/docs

Haftungsausschluss: Ich bin Webentwickler bei Atatus.

Fizer Khan
quelle
1
Ich habe Ataus integriert und dann etwas wie foo.bar = '' ausprobiert, was eine Ausnahme verursachte. Aber ich kann nichts im Atatus-Dashboard sehen.
Vmachacek
Könnten Sie uns bitte eine E-Mail schreiben?
Fizer Khan
5
Schamloser Stecker. Die Anzeigen sollten auf die rechte Seite beschränkt sein.
Wird
0

Die nicht erfasste Bibliothek ist eine gute kostenlose Möglichkeit, alle JS-Fehler zu erfassen, einschließlich nicht behandelter Ablehnungen.

LeeGee
quelle
-2

Vielleicht möchten Sie diesen neuen Dienst unter http://rescuejs.com/ ausprobieren . https://bugsnag.com/

Hiermit können Sie alle Ihre Javascript-Fehler protokollieren, ohne selbst serverseitigen Code schreiben zu müssen. Es verfolgt auch Browserversionen und so weiter.

Ich bin mir nicht sicher, ob ich sie als 100% "unternehmensfähig" betrachten würde, aber es lohnt sich auf jeden Fall, sie sich anzusehen.

lillesand
quelle
8
Es wurde heruntergefahren. Wenn Sie versuchen, sich jetzt anzumelden, erhalten Sie die Meldung "Vielen Dank für Ihr Interesse, leider wird an Rescue.js nicht mehr aktiv gearbeitet."
Tag