2010-08-11 8 views
9

Existe-t-il un moyen d'exporter les messages enregistrés dans la console javascript dans Google Chrome? Si non, quelqu'un peut-il suggérer un bon moyen de diagnostiquer les problèmes de javascript sur la machine d'un client? Je n'ai pas été en mesure de reproduire les problèmes localement, malgré la mise en place d'un environnement identique.Exporter le journal de la console Javascript depuis Google Chrome

Répondre

17

Étape 1: Ajouter un groupe d'états CONSOLE.LOG qui aident à diagnostiquer votre problème

Étape 2: Ajouter une logique de redéfinir console.log sur le système de votre client afin qu'il enregistre effectivement ses arguments à la fenêtre .log (ou autre) au lieu de les journaliser sur la console.

window.log = [] 
console = console || {"log":function(x) {window.log.push(x);}} 

Étape 3: Ajoutez un gestionnaire d'onUnload qui se déclenche d'une requête AJAX à votre serveur avec le contenu de window.log comme l'un de ses paramètres

Étape 4: Profit! ;-)

Un bonus supplémentaire à ce système est que (une fois que vous l'avez installé), vous pouvez utiliser console.log indistinctement, et si vous êtes dans votre environnement de développement ou votre environnement en direct, il fera la bonne chose.

+0

post-scriptum Tous les navigateurs ne prennent pas en charge onUnload; Si ce n'est pas le cas de votre client, vous voudrez probablement déclencher les appels AJAX sur chaque console.log à la place (ou utiliser window.setInterval pour "scruter" window.log fréquemment). – machineghost

+0

Intéressant et délicat .. mais semble compliqué! (en particulier l'étape 3) N'y a-t-il pas un moyen plus facile de le faire ..? – Dexter

+0

C'est vraiment très simple, mais juste pour essayer de montrer que j'ai ajouté une deuxième réponse. – machineghost

1

Vous pouvez utiliser ma bibliothèque de journalisation JavaScript, log4javascript. Vous devrez:

  • Mettre en place log4javascript pour envoyer des messages de journalisation au serveur en utilisant AjaxAppender (voir le quick start guide, près du fond)
  • Ajouter appels diagraphie à votre JavaScript
  • Collect messages de journalisation sur le serveur en utilisant votre technologie de choix
7

Voici une version légèrement plus courte/plus simple de ma réponse précédente. Pour simplifier les choses, nous allons simplement faire un appel AJAX sur chaque journal, et pour simplifier les choses, nous utiliserons jQuery pour effectuer le «gros travail». (Si vous utilisez une bibliothèque JS autre que jQuery, elle devrait avoir une sorte de méthode similaire, sinon, ou si vous n'utilisez pas une bibliothèque JS ... le temps pour sérieusement considérez jQuery!) Oh, et nous ' J'introduirai du pseudo-code côté serveur pour montrer à quel point cette partie de l'équation est facile.

Étape 1: Ajouter un groupe d'états CONSOLE.LOG qui aident à diagnostiquer votre problème

Étape 2: Ajouter une logique de redéfinir console.log sur le système de votre client afin qu'il envoie le journal à votre serveur s'il n'y a pas de console

var SERVER_URL = "www.yourServer.com/ajaxLogger.jsp"; 
var ajaxConsole = {"log":function(x) { 
    $.get(SERVER_URL, {"log":x}); 
}} 
console = console || ajaxConsole; // If there is no console, use the AJAX one 

Étape 3: Créer une page d'enregistrement sur votre serveur

L'exemple suivant utilise pseudo-code, puisque tout le monde a une autre langue côté serveur:

String log = pageParameters["log"]; 
Database.execute("INSERT INTO yourLogTable (log, date) VALUES ('" + 
     dbEscape(log) +"', current date)"); 
1

Il existe un outil open-source qui vous permet d'enregistrer toutes les sorties console.log dans un fichier sur votre serveur - JS LogFlush (plug!).

JS LogFlush est une solution de journalisation JavaScript intégrée qui inclut:

  • remplacement de l'interface utilisateur-moins cross-browser de console.log - côté client.
  • système de stockage de journaux - côté serveur.

Demo

Questions connexes