108 votes

La journalisation côté Client des Erreurs JavaScript sur le Serveur

Im l'exécution d'un ASP.NET Site où j'ai des problèmes pour trouver certaines Erreurs JavaScript, avec juste un test manuel.

Est-il possible de rattraper toutes les Erreurs JavaScript sur le Client et les enregistre sur le Serveur c'est à dire dans le Journal des événements (via Webservice ou quelque chose comme ça)?

74voto

insin Points 19509

Vous pouvez essayer de créer votre propre gestionnaire pour l' événement onerror et d'utiliser XMLHttpRequest pour dire au serveur ce qui n'allait pas, cependant, car il ne fait pas partie de la spécification, de soutien est un peu feuilletée.

Voici un exemple de l'Aide de XMLHttpRequest pour le journal des erreurs JavaScript:

window.onerror = function(msg, url, line)
{
  if(encodeURIComponent) {
    var req = new AjaxRequest();
    var params = "msg=" + encodeURIComponent(msg) + '&url=' + encodeURIComponent(url) + "&line=" + line;
    req.setMethod("POST");
    return req.loadXMLDoc("<i>/scripts/logerror.php</i>", params);
  }
  return false;
}

34voto

Ztyx Points 1617

Réponse courte: Oui, c'est possible.

Plus réponse: les Gens ont déjà écrit sur la façon dont vous pouvez (au moins partiellement) à résoudre ce problème en écrivant votre propre code. Toutefois, notez qu'il y a des services qui semble avoir fait en sorte que le code JS nécessaires fonctionne dans la plupart des navigateurs. J'ai trouvé ce qui suit:

Je ne peux pas parler pour tous ces services que je n'ai pas essayé encore. Cependant, je remarque que ExceptionHub semble avoir une certaine approfondie de code!

12voto

Karl Points 1085

J'ai juste mis en œuvre côté serveur de journalisation des erreurs sur erreurs javascript sur un projet au travail. Il y a un mélange de code ancien et le nouveau code à l'aide de jQuery.

J'utilise une combinaison d' window.onerror et envelopper les jQuery et des gestionnaires d'événements onready fonction avec une erreur de manipulation de la fonction (voir: Erreur JavaScript Suivi: Pourquoi la fenêtre.onerror n'Est Pas Assez).

  • window.onerror: captures tous les errrors dans IE (et la plupart des erreurs sous Firefox), mais ne fait rien dans Safari et Opera.
  • jQuery gestionnaires d'événements: captures jQuery cas d'erreurs dans tous les navigateurs.
  • jQuery prêt de la fonction: captures d'initialisation des erreurs dans tous les navigateurs.

Une fois que j'ai pris l'erreur, j'ai ajouter des propriétés supplémentaires (url, navigateur, etc) puis l'envoyer vers le serveur à l'aide d'un appel ajax.

Sur le serveur j'ai une petite page qui prend tout de posté des arguments et des sorties à notre serveur de journalisation.

J'aimerais ouvrir le code source (comme un plugin jQuery). Si quelqu'un est intéressé, faites le moi savoir, il aiderait à convaincre les patrons!

1voto

Dumitru Glavan Points 51

Il vaut la peine d'essayer http://jslogger.com qu'est-ce que vous cherchez. Il prend en charge les appareils mobiles.

0voto

Mike Stone Points 21293

Vous pourriez éventuellement faire un appel Ajax vers le serveur à partir d'un try/catch, mais c'est probablement le meilleur que vous pouvez faire.

Puis-je suggérer JavaScript tests unitaires à la place? Éventuellement avec JSUnit?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X