11
votes

Un système de journalisation de frontend javascript qui se connecte à notre backend?

Nous avons un système de journalisation établi pour nos services côté serveur. Plus précisément, notre projet Django utilise fortement le module de journalisation Python, alors appelle les appels d'appel sur LOGGER.INFO () , LOGGER.WARN () ET LOGGER.Error () est ramassé par notre système de journalisation centralisé.

Je voudrais un équivalent sur notre fronteau et j'ai quelques idées:

  1. Il y aurait une sorte d'objet de journalisation personnalisé exposé via JavaScript qui enverrait des messages à la backend via un XMLHTTPQUEST.

  2. J'aimerais avoir des niveaux de journalisation équivalents sur le côté client: débogage , info , avertissement et et et ERREUR .

  3. Lorsque nous développons localement (mode de débogage), j'aimerais que les messages de journalisation soient connectés à la console de navigateur / Firebug via console.log () .

  4. dans la production, Les messages doivent être supprimés complètement.

  5. Je me souviens de voir un moyen de capturer toutes les exceptions javascript non décourgées, celles-ci doivent donc être enregistrées au niveau de l'erreur .

  6. Nous utilisons déjà Suivi des événements Google Analytics < / a>, et ce serait bien pour n'importe quel système que nous créons pour relier à cela en quelque sorte.

    Est-ce une bonne idée? Comment ferais-tu ceci? Y a-t-il des solutions existantes?

    (FWIW, nous utilisons JQuery sur le frontend.)

    Mise à jour: Question simplifiée ici: https: //stackoverflow.com/questions/1423267/are-There-any-logging-frameworks-for-javascript


6 commentaires

Je ne peux pas décider d'un bon titre pour cette question. N'hésitez pas à améliorer.


Si le client peut "remplir" les journaux côté serveur, cela signifie-t-il que quiconque sur Internet (en supposant que c'est une webApp) peut inonder le journal côté serveur par le spamming Ajax? Vous voudrez peut-être ajouter des restrictions de sécurité sur qui peut enregistrer "Stuff" à notre journal système ...


@Dashk - Ouais, mais ça ne vaut pas la peine pour nous. Nous vous connectons également tous les liens brisés, alors tout le monde peut inonder nos journaux en martelant des chemins inexistants sur notre site. Mais nous sommes des gens gentils et pas vraiment une cible DOS pour le moment :)


J'ai fait STH similaire dans une émission XMPP-APP Reporting ProJ. Nous avons découvert que les journaux peuvent vraiment obstruer les journaux si l'application est longue depuis longtemps. (Nous ne faisons pas les rapports sur l'onthefly. Nous envoyons uniquement les données si le client souhaite signaler un problème - STH de réfléchir?) Si je devais le refaire, je vais utiliser des constantes pour remplacer tout le message du journal complet . (Par exemple, "l'utilisateur est entré dans une salle de discussion. Nom de la chambre est: {0}" sera enregistré comme "# 1 {0}" dans le journal. Cela réduit considérablement la taille des données voyageant entre le client et le serveur. Nous utilisons log4javaScript.


N'hésitez pas à essayer usernap . En savoir plus aussi Cet article de Mozilla Hacks


Je me souviens de voir un moyen de capturer toutes les premières exceptions javascript non capturées, celles-ci doivent donc être enregistrées au niveau d'erreur. - Ceci est possible avec window.onerror qui n'est pas supporté par chaque navigateur au moins pas par les plus âgés. par exemple. Opera le soutient à partir de 2011 décembre 2011.


3 Réponses :


1
votes

L'idée semble bonne ici. Sois juste conscient de ce que vous cherchez exactement à vous connecter au client et à y avoir.

Je recommanderais d'utiliser log4javascript pour la journalisation. L'API Log4 est assez droite.


0 commentaires

1
votes

voici d'ici à ce sujet numéro.

Certaines recommandations sont les suivantes: log4js , log4javaScript et Blackbird .

FWIW, log4js était la réponse acceptée là-bas. Je n'ai pas d'expérience avec aucune de ces plateformes, je ne peux donc pas vraiment recommander l'un sur l'autre.


2 commentaires

Utile, mais qu'en est-il des questions 5 et 6?


@a payé Nerd - Je ne travaille pas réellement avec Java ou JavaScript, alors je ne connais donc pas vraiment ces problèmes. Je viens de mentionner ces autres options car je l'avais rencontrés récemment lorsque on m'a demandé de regarder dans une façon d'intégrer la journalisation JavaScript avec notre solution de journalisation centralisée (que nous travaillons actuellement). Je n'ai toujours pas eu à faire quoi que ce soit avec JavaScript.



15
votes

Premier, j'ai écrit et entretenez log4javascript , donc je déclare mon intérêt à l'avant. Je l'utilise aussi tous les jours de mon travail, alors j'en ai une expérience en tant qu'utilisateur. Voici comment je traiterais vos questions, en particulier en ce qui concerne Log4javaScript:

  1. Utilisez log4javascript's ajaxappender pour la journalisation du serveur ;

  2. déboges , info , avertissement et erreur sont tous pris en charge, ainsi que Trace et fatal ;

  3. Utilisez un BrowserConsoleAppender pour vous connecter à Firebug ou la console de navigateur natif;

  4. Si vous ne souhaitez pas supprimer tous les appels de journalisation du débogage de votre code de production, vous pouvez ajuster le seuil de votre enregistreur (en utilisant log.setlevel (log4javascript.level.error) , Par exemple, qui supprimera tous les appels de journaux avec priorité moins de erreur ). Si vous souhaitez supprimer tous les appels de journalisation, vous pouvez déposer dans un Version stub de log4javascript dans votre production code.

  5. Vous devrez écrire un peu de code pour le faire en utilisant < code> window.onerror . Quelque chose comme window.onerror = fonction (msg, fichier, ligne) {log.error ("erreur" + fichier + "en ligne" + ligne + ":" + msg); }

  6. Je ne suis pas sûr de savoir comment vous voulez nouer avec Google Analytics. log4javascript n'a pas de support particulier pour cela.


2 commentaires

En fait, MSG, le fichier et la ligne ne suffisent généralement pas pour déboguer en fonction des journaux. Ce que vous avez vraiment besoin d'envoyer est la pile. Il s'agit actuellement du cinquième paramètre, mais non pris en charge par chaque navigateur, vous devez donc créer une nouvelle erreur, remplacer le message, le fichier, etc. et envoyer la pile de celle-ci si le navigateur prend en charge la pile.


Remarque: il semble que la nouvelle erreur ne contienne pas la pile: Github.com/stacktracejs /Stacktrace.js/issues/26 Donc, j'ai bien peur qu'il n'y ait pas de solution de contournement dans de vieux navigateurs, mais pas encore testé.