2008-09-18 13 views
9

Je voudrais créer une fonction de journalisation de débogage "universelle" qui inspecte l'espace de noms JS pour les bibliothèques de journalisation bien connues.Quels outils de journalisation de débogage sont disponibles à partir de Javascript?

Par exemple, il prend en charge actuellement la console.log de Firebug:

var console = window['console']; 
if (console && console.log) { 
    console.log(message); 
} 

De toute évidence, cela ne fonctionne que dans Firefox si Firebug est installé/activé (il va également travailler sur d'autres navigateurs avec Firebug Lite). Fondamentalement, je vais fournir une bibliothèque JS dont je ne sais pas dans quel environnement il va être tiré, et je voudrais être en mesure de comprendre s'il existe un moyen de signaler la sortie de débogage à l'utilisateur. Donc, peut-être que jQuery fournit quelque chose - je vérifie que jQuery est présent et l'utilise. Ou peut-être il y a des plugins IE bien connus qui fonctionnent que je peux renifler. Mais il doit s'agir d'un mécanisme assez bien établi et utilisé. Je ne peux pas vérifier chaque fonction de journal obscure que les gens créent.

S'il vous plaît, seulement une bibliothèque/technologie par réponse, de sorte qu'ils peuvent obtenir le classement des votes. En outre, l'utilisation de alert() est une bonne solution à court terme, mais elle se décompose si vous voulez une journalisation de débogage robuste ou si le blocage de l'exécution est un problème.

Répondre

-1

Moi-même, je suis un croyant ferme dans les domaines suivants:

alert('Some message/variables'); 
+0

Ceci est une bonne solution temporaire, mais échoue si vous émettez une journalisation au niveau de l'information, ce qui est généralement le cas. L'application deviendrait rapidement inutilisable à cause de toutes les alertes() s – levik

+0

Ahh, je supposais qu'il s'agissait plus de sortie à court terme de l'information – Teifion

+0

Même si vous étiez simplement "sortie" info, parce que l'alerte est un appel bloquant, il peut, malheureusement , provoquer des effets secondaires, esp. avec Ajax. J'ai eu le code se comporter mal simplement à cause d'une alerte placée au mauvais endroit. –

4

Firebug lite est un navigateur croix, version allégée de Firefbug qui va au moins vous donner des capacités CONSOLE.LOG sur la plupart des navigateurs.

0

Qu'en est-il de Firebug Lite (pour les navigateurs autres que Firefox)? Je ne l'ai pas beaucoup utilisé sauf lors du débogage du code Dojo dans IE. Mais il essaie de son mieux de mettre une console Firebug dans IE, Safari et Opera.

Bien sûr, il y a toujours l'alerte fiable (err_msg); : D

1

Si vous utilisez déjà jQuery, je recommande chaudement le plugin jQuery Debug (a.k.a., jquery.debug.js). Voir http://trainofthoughts.org/blog/2007/03/16/jquery-plugin-debug/.

Ce plugin vous permet d'activer ou de désactiver la journalisation du débogage via un commutateur global. Logging ressemble à ceci:

$.log('My value is: ' + val); 

La sortie est envoyée à console.log sous Firefox et est écrit dans un bloc div inséré au bas de la page sur les autres navigateurs.

+0

Je n'utilise pas jQuery - comme indiqué, je crée une bibliothèque qui PEUT être chargée dans une page où jQuery est présent. Si cela se produit, j'aimerais utiliser les fonctionnalités jQuery sur lesquelles je peux compter ... Mais un plugin tiers est un étirement ... – levik

7

Personnellement, j'utilise Firebug/Firebug Lite et sur IE permet à Visual Studio de faire le débogage. Aucun d'entre eux ne fait du bien quand un visiteur utilise un navigateur fou. Vous avez vraiment besoin de votre javascript côté client pour enregistrer ses erreurs sur votre serveur. Jetez un coup d'œil à la présentation PowerPoint à laquelle j'ai fait référence ci-dessous. Il a quelques idées assez soignées sur la façon d'obtenir votre javascript pour enregistrer des trucs sur votre serveur. Fondamentalement, vous accrochez window.onerror et vos blocs try {} catch() {} avec une fonction qui renvoie une requête à votre serveur avec des informations de débogage utiles.

Je viens de mettre en place un tel processus sur ma propre application web. Chaque bloc catch() {} appelle une fonction qui envoie un message codé JSON au serveur, qui à son tour utilise mon infrastructure de journalisation existante (dans mon cas, log4perl).La présentation à laquelle je suis lié suggère également de charger une image dans votre javascript en incluant les erreurs dans la requête GET. Le seul problème est que si vous voulez inclure des traces de pile (que IE ne génère pas pour vous), la requête sera trop grande.

Tracking ClientSide Errors, by Eric Pascarello

PS: Je voulais ajouter que je ne pense pas qu'il est une bonne idée d'utiliser tout type de bibliothèque comme jQuery pour l'enregistrement « hardcore » parce que peut-être la raison de l'erreur que vous connectez est jQuery ou Firebug Lite! Peut-être que l'erreur est que le navigateur (toux IE6) a fait un ordre de chargement fou et lance une sorte d'erreur de référence Null parce qu'il était trop stupide pour charger la bibliothèque correctement.

Dans mon exemple, je me suis assuré que tout mon code de journal javascript est dans la < la tête > et non tiré en tant que fichier .js. De cette façon, je peux être raisonnablement sûr que peu importe les types de courbes que le navigateur lance, les chances sont bonnes, je suis capable de le connecter.

3

MochiKit a les fonctions suivantes (inclus ici avec la résolution complète de l'espace de noms):

MochiKit.Logging.logDebug() // prefaces value with "DEBUG: " 
MochiKit.Logging.log() // prefaces value with "INFO: " 
MochiKit.Logging.logError() // prefaces value with "ERROR: " 
MochiKit.Logging.logFatal() // prefaces value with "FATAL: " 
MochiKit.Logging.logWarning() // prefaces value with "WARNING: " 

Il y a beaucoup plus à l'espace de noms MochiKit.Logging que cela, mais ce sont les bases.