2010-09-13 3 views
20

J'ai un sérieux problème JavaScript qui est difficile à reproduire dans n'importe lequel de nos environnements dev/test/prod. Néanmoins, il est signalé de manière constante par nos clients. Parfois, nous pensons que c'est spécifique au navigateur - parfois nous pensons que c'est spécifique à l'action - parfois nous pensons que c'est lié aux cookies. C'est difficile et nous nous retrouvons dans trop de directions différentes et ils sont tous à court.Meilleur moyen de capturer les erreurs JavaScript dans la production?

Nous pensons que le problème se produit dans l'un de nos principaux fichiers JavaScript - mais ce fichier est énorme. Nous avons déjà identifié d'autres problèmes dans ce fichier - et protégé contre les problèmes futurs en utilisant les blocs try/catch avec succès - mais, pour le moment, nous ne savons pas très bien où ces nouveaux problèmes se produisent.

Nous avons effectué une recherche dans nos carnets de serveur et les informations que nous trouvons ne sont pas utiles.

Je me demande si l'utilisation d'un framework de journalisation JavaScript aiderait nos problèmes. Va-t-il implémenter quelque chose comme "log4javascript" capturer/enregistrer l'activité de nos utilisateurs, pas seulement nous? Aucun conseil? Quelqu'un d'autre a été dans cette situation? Quelles stratégies avez-vous utilisées pour mieux comprendre vos erreurs?

+0

Oui, [log4js] (http://log4js.berlios.de/) ou log4javascript sont d'excellentes idées. –

Répondre

20

AjaxAppender de log4javascript peut être utilisé pour envoyer des messages de journal au serveur.

var log = log4javascript.getLogger("serverlog"); 
var ajaxAppender = new log4javascript.AjaxAppender("http://example.com/clientlogger"); 
log.addAppender(ajaxAppender); 

Vous pouvez mettre des appels de journalisation d'information dans votre code et ajouter un gestionnaire window.onerror pour détecter les erreurs non capturés par try/catch blocs dans votre code:

window.onerror = function(errorMsg, url, lineNumber) { 
    log.fatal("Uncaught error " + errorMsg + " in " + url + ", line " + lineNumber); 
}; 

Vous aurez besoin aussi de créer quelque chose sur le serveur pour traiter les demandes de journalisation à partir du navigateur.

Divulgation complète: Je suis l'auteur de log4javascript.

+0

merci Tim - J'étudie maintenant! – rsturim

+2

Je deuxième AjaxAppender de log4javascript, fait juste le travail. Expliqué ici: http: //www.adamjamesnaylor.com/2012/10/10/Journalisation-Client-JavaScript-Erreurs-Sur-Le-Serveur.aspx –

+0

Bugsnag fait cela maintenant .. juste FYI –

Questions connexes