108 Stimmen

Protokollierung von clientseitigen JavaScript-Fehlern auf dem Server

Im läuft eine ASP.NET-Website, wo ich Probleme, einige JavaScript-Fehler nur mit manuellen Tests zu finden haben.

Gibt es eine Möglichkeit, alle JavaScript-Fehler auf der Clientseite abzufangen und auf dem Server zu protokollieren, z.B. im EventLog (via Webservice oder ähnlichem)?

74voto

Jonny Buchanan Punkte 60128

Sie könnten versuchen, einen eigenen Handler für die On-Error-Ereignis und XMLHttpRequest verwenden, um dem Server mitzuteilen, was schief gelaufen ist, aber da es nicht Teil einer Spezifikation ist, die Unterstützung ist etwas lückenhaft .

Hier ist ein Beispiel aus Verwendung von XMLHttpRequest zur Protokollierung von JavaScript-Fehlern :

window.onerror = function(msg, url, line)
{
  var req = new XMLHttpRequest();
  var params = "msg=" + encodeURIComponent(msg) + '&url=' + encodeURIComponent(url) + "&line=" + line;
  req.open("POST", "/scripts/logerror.php");
  req.send(params);
};

33voto

Ztyx Punkte 12604

Kurze Antwort: Ja, das ist möglich.

Längere Antwort: Es wurde bereits darüber geschrieben, wie Sie dieses Problem (zumindest teilweise) lösen können, indem Sie Ihren eigenen Code schreiben. Beachten Sie jedoch, dass es Dienste gibt, die anscheinend dafür sorgen, dass der benötigte JS-Code in vielen Browsern funktioniert. Ich habe die folgenden gefunden:

Ich kann nicht für alle diese Dienste sprechen, da ich sie noch nicht ausprobiert habe.

12voto

Karl Punkte 1555

Ich habe gerade implementiert Server-Seite Fehlerprotokollierung auf Javascript-Fehler auf ein Projekt bei der Arbeit. Es gibt eine Mischung aus Legacy-Code und neuen Code mit jQuery .

Ich verwende eine Kombination aus window.onerror und die jQuery-Ereignishandler und die onready-Funktion mit einer Fehlerbehandlungsfunktion umhüllen (siehe: JavaScript-Fehlerverfolgung: Warum window.onerror nicht ausreicht ).

  • window.onerror : Fängt alle Fehler im IE (und die meisten Fehler in Firefox), aber nichts in Safari und Opera.
  • jQuery-Ereignishandler: fängt jQuery-Ereignisfehler in allen Browsern ab.
  • jQuery ready-Funktion: fängt Initialisierungsfehler in allen Browsern ab.

Sobald ich den Fehler erkannt habe, füge ich ihm einige zusätzliche Eigenschaften hinzu (URL, Browser usw.) und übermittle ihn dann mit einem Ajax-Aufruf zurück an den Server.

Auf dem Server habe ich eine kleine Seite, die nur die geposteten Argumente aufnimmt und sie an unser normales Server-Logging-Framework ausgibt.

Ich würde den Code dafür gerne als Open Source zur Verfügung stellen (als jQuery-Plugin). Wenn jemand interessiert ist, lassen Sie mich wissen, es würde helfen, die Chefs zu überzeugen!

2voto

Leandro Lages Punkte 41

Wenn Sie Google Analytics verwenden, können Sie Javascript-Fehler in Google Analytics Events protokollieren.

Siehe diese App: http://siteapps.com/app/log_javascript_errors_with_ga-181

Ich hoffe, es hilft.

0voto

Mike Stone Punkte 43560

Sie könnten möglicherweise einen Ajax-Aufruf an den Server von einem Try/Catch machen, aber das ist wahrscheinlich über das Beste, was Sie tun können.

Darf ich stattdessen JavaScript-Unit-Tests vorschlagen? Möglicherweise mit JSUnit ?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X