2010-05-13 14 views
7

Mögliche Duplizieren:
Logging Clientside JavaScript Errors on ServerLog Client-Seite Fehler an den Server

Wie kann ich mich einloggen Client-Seite JavaScript-Fehler auf dem Server? Ich benutze jQuery und MVC.

+0

Ich benutze im Moment das Elmah Logging Framework. Gibt es eine Möglichkeit, eine Lösung in diese zu verknüpfen? –

+1

Ich fand diese nette gehostete Lösung für das Problem vor kurzem: http://errorceptive.com/ –

+0

JSNLog (jsnlog.com) können Sie Zeichenfolgen und Objekte auf dem Client in Ihrem JavaScript protokollieren und sie auf dem Server mit Elmah speichern. Sie geben Elmah nur bei der Installation von JSNLog an. – user1147862

Antwort

16

Da es sich um clientseitige Fehler handelt, müssen Sie sie mithilfe von XMLHttpRequest an den Server senden.

window.onerror = function (msg, url, line) 
{ 
    var message = "Error in "+url+" on line "+line+": "+msg; 
    $.post("logerror.aspx", { "msg" : message }); 
} 

Beachten Sie, dass line und url kann vor in IE-Versionen sehr ungenau sein bis 8.

+0

window.onerror = Funktion (msg, url, line) arbeitete für mich – timborden

+0

Gibt es irgendwelche Sicherheitsprobleme, die man mit diesem Ansatz beachten sollte? –

+0

@Arman: keine davon zu sprechen. Jemand könnte die Anfrage an "logerror.aspx" mit einer benutzerdefinierten Nachricht fälschen, aber solange Ihr serverseitiger Code fest ist, gibt es keine Angriffsvektoren. –

6

Sie meine log4javascript verwenden könnte, was eine appender hat die XMLHttpRequest verwendet, um: Sie könnten try...catch Aussagen oder window.onerror verwenden logge zum Server:

var log = log4javascript.getLogger("serverLog"); 
var ajaxAppender = new log4javascript.AjaxAppender("clientlogger.jsp"); 
log.addAppender(ajaxAppender); 

try { 
    nonExistentFunction(); 
} catch(ex) { 
    log.error("Something's gone wrong!", ex); 
} 
+0

Danke für diesen Vorschlag. Wissen Sie, ob es möglich ist, dies mit log4net zu verbinden? –

+0

Es ist einfach genug, es manuell zu tun. Die Standardmethode, mit der 'AjaxAppender' Logging-Daten sendet, ist ein HTTP-Post mit Parametern, die Aspekte des Logging-Ereignisses darstellen, wie z. B. Nachricht, Zeitstempel, Schweregrad usw. Auf dem Server haben Sie eine Seite oder einen HTTP-Handler posten und einen log4net-Aufruf basierend auf den Post-Parametern erstellen. –

+0

JSNLog (jsnlog.com) macht all das für Sie out of the box. Es besteht aus einer JavaScript-Protokollbibliothek und einer serverseitigen DLL, die Protokollnachrichten von der JavaScript-Bibliothek empfängt und an Ihre serverseitige Protokollbibliothek wie Log4Net, NLog oder Elmah weiterleitet. Sie können Ihre JavaScript-Logger in Ihrer web.config konfigurieren. Und es verfügt über alle möglichen Funktionen wie das Unterdrücken doppelter Nachrichten, das Stapeln von Nachrichten und das Filtern nach Browsertyp. – user1147862