Détectez toutes les erreurs JavaScript et envoyez-les au serveur


232

Je me demandais si quelqu'un avait de l'expérience dans le traitement des erreurs JavaScript dans le monde et les envoyait du navigateur client à un serveur.

Je pense que mon point est assez clair, je veux connaître toutes les exceptions, erreurs, erreurs de compilation, etc. qui se produisent du côté client et les envoyer au serveur pour les signaler.

J'utilise principalement MooTools et head.js(pour le côté JS) et Django pour le côté serveur.


20
Je ne vois pas pourquoi cette question n'est pas claire.
Michael Hilus

3
A voté deux fois pour rouvrir la question, mais sans aucune chance. Il est totalement difficile de savoir pourquoi cette question est fermée comme peu claire.
Muhammad Usman

7
@ andrew-barber - si tant d'utilisateurs trouvent cette question suffisamment pertinente pour la voter, alors peut-être que si ce n'est pas clair pour vous, le problème est avec vous ??
isapir

5
Cette question est non seulement claire, mais elle est également sous-estimée :)
Teoman shipahi

Réponses:


16

J'ai récemment testé Sentry en production et cela fonctionne très bien (JS et autres langages comme PHP)

1- C'est open source (vous pouvez l'installer sur votre propre serveur) 2- Vous pouvez utiliser le plan gratuit (100 rapports / jour)

Ou installez-le sur votre serveur: github.com/getsentry


Notez qu'ils ont un plan gratuit illimité pour les établissements d'enseignement
christianvuerings

8
Ne semble plus être open source, toutes les options sont payantes?
David Cumps

4
@DavidCumps Ils offrent toujours le service gratuit (Trial), mais vous ne recevez que 7 jours d'historique de bugs ou vous pouvez l'installer sur votre propre serveur depuis son open source ( github.com/getsentry )
Tarek

1
Google Tag Manager dispose d'un écouteur d'erreur Javascript, peut-être intéressant de le vérifier, surtout si vous utilisez déjà GA
Adrian Gunawan

Vous devriez également vérifier TrackJS pour cela. C'est un service payant, mais il fournit une tonne de contexte sur la façon dont l'utilisateur est entré dans la situation d'erreur pour le débogage. Je suis parmi les développeurs et j'ai corrigé des tonnes de bugs avec ça :)
Todd Gardner

318

Je vérifierais window.onerror

Exemple:

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

Gardez à l'esprit que renvoyer true empêchera le déclenchement du gestionnaire par défaut, et retourner faux permettra au gestionnaire par défaut de s'exécuter.


9
Vous voudriez attribuer window.onerror de préférence avant toute autre exécution. Donc, où que vous vouliez le mettre, assurez-vous qu'il fonctionne avant tout autre code / fichier js.
Mike Lewis

17
Remarque, Mozilla recommande: 'Notez que certains / plusieurs événements d'erreur ne déclenchent pas window.onerror, vous devez les écouter spécifiquement.'
Adam Naylor,

88
Ouais, j'adore la façon dont cela dit certains / beaucoup , très descriptif - merci Mozilla.
Daniel Mendel

5
Mozilla expose GlobalEventHandlers.onerror: developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/…
roland

1
Que se passe-t-il si le code qui gère window.onerror lui-même génère une erreur. Y a-t-il une possibilité de boucle infinie?
Martin Brown

15

Si votre site Web utilise Google Analytics, vous pouvez faire ce que je fais:

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

Quelques commentaires sur le code ci-dessus:

  • Pour les navigateurs modernes, la trace complète de la pile est enregistrée.
  • Pour les navigateurs plus anciens qui ne capturent pas la trace de pile, le message d'erreur est enregistré à la place. (Surtout la version iOS antérieure dans mon expérience).
  • La version du navigateur de l'utilisateur est également enregistrée, vous pouvez donc voir quelles versions de système d'exploitation / navigateur génèrent quelles erreurs. Cela simplifie la hiérarchisation des bogues et les tests.
  • Ce code fonctionne si vous utilisez Google Analytics avec "analytics.js", comme ceci . Si vous utilisez "gtag.js" à la place, comme ceci , vous devez modifier la dernière ligne de la fonction. Voir ici pour plus de détails .

Une fois le code en place, voici comment vous voyez les erreurs Javascript de vos utilisateurs:

  1. Dans Google Analytics, cliquez sur la Behaviorsection puis sur le Top Eventsrapport.
  2. Vous obtiendrez une liste des catégories d'événements. Cliquez window.onerrordans la liste.
  3. Vous verrez une liste des traces de pile Javascript et des messages d'erreur. Ajoutez une colonne au rapport pour les versions OS / navigateur de vos utilisateurs en cliquant sur le Secondary dimensionbouton et en entrant Event Labeldans la zone de texte qui apparaît.
  4. Le rapport ressemblera à la capture d'écran ci-dessous.
  5. Pour traduire les chaînes du système d'exploitation / navigateur en descriptions plus lisibles par l'homme, je les copie-colle dans https://developers.whatismybrowser.com/useragents/parse/

entrez la description de l'image ici


3
Cela ne piège pas toutes les erreurs, il suffit d'essayer d'attraper des blocs, bien que ce soit une chose cool à expliquer et je ne pense pas que vous méritez des votes négatifs.
Nick Steele

Merci, Nick! J'ai mis à jour ma réponse avec du code testé au combat qui fonctionne bien sur mon site Web et qui capture toutes les erreurs, pas seulement celles que vous piègez avec try ... catch.
Martin Omander

2

N'essayez pas d'utiliser des services tiers, essayez plutôt les vôtres.

Les gestionnaires d'erreur peuvent intercepter les scénarios ci-dessous,

  1. TypeError non capturé ne peut pas être capturé
  2. Une référenceError non capturée ne peut pas être capturée, par exemple: var.click ()
  3. TypeError peut être capturé
  4. Une erreur de syntaxe peut être capturée
  5. ReferenceError peut être capturée

Pour détecter les erreurs Javascript:

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

Pour capturer des erreurs AngularJS:

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

0

De plus, le service http://jslogger.com peut vous aider avec cela:

Consigner les erreurs et les événements Javascript dans le cloud

depuis http://jslogger.com/features :

Désormais, vous pouvez espionner toutes les erreurs qui perturbent l'expérience utilisateur de votre site. Chaque erreur Javascript sera détectée et vous sera présentée pour un débogage ultérieur.

AVERTISSEMENT: non affilié au service / entreprise.


1
503 Service non disponible
Rax

0

Vous pouvez essayer Atatus - Il s'agit d'un nouveau service de suivi des erreurs JavaScript avec Real User Monitoring (RUM) pour les applications Web modernes.

Nous ne capturons pas seulement les erreurs, mais aussi les événements utilisateur qui ont déclenché l'erreur. Cela vous donne les étapes pour reproduire l'erreur de votre côté.

Parallèlement à la capture d'erreurs, nous capturons également le temps de chargement de la page et le montrons sous différentes perspectives - Géo, Navigateur, Exploration de page, Histogramme de page, Surveillance Ajax et Surveillance des transactions.

https://www.atatus.com/

Documents disponibles: https://www.atatus.com/docs

Avertissement: je suis développeur web chez Atatus.


1
J'ai intégré Ataus, puis j'ai essayé quelque chose comme foo.bar = '' qui a provoqué une exception. Mais je ne vois rien dans le tableau de bord d'Atatus.
vmachacek

Pourriez-vous s'il vous plaît nous envoyer un e-mail?
Fizer Khan

5
Prise sans vergogne. Les annonces doivent être limitées au côté droit.
Will

0

La bibliothèque non capturée est un bon moyen gratuit de capturer toutes les erreurs JS, y compris les rejets non gérés.


-2

Vous voudrez peut-être consulter ce nouveau service, http://rescuejs.com/ . https://bugsnag.com/

Vous permet de consigner toutes vos erreurs javascript sans écrire vous-même de code côté serveur. Il suit également les versions du navigateur, etc.

Je ne suis pas sûr de les considérer comme 100% "prêts pour l'entreprise", mais cela vaut vraiment la peine de vérifier.


8
Il a été fermé. Si vous essayez de vous inscrire maintenant, vous obtenez le message "Merci de votre intérêt, malheureusement Rescue.js n'est plus activement travaillé."
Jour
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.