Enregistrez le console.log dans Chrome dans un fichier

173

Quelqu'un connaît-il un moyen d'enregistrer la sortie console.log dans Chrome dans un fichier? Ou comment copier le texte hors de la console?

Supposons que vous exécutiez quelques heures de tests fonctionnels et que vous ayez des milliers de lignes de sortie console.log dans Chrome. Comment l'enregistrer ou l'exporter?

eeejay
la source

Réponses:

98

J'avais besoin de faire la même chose et c'est la solution que j'ai trouvée:

  1. Activez la journalisation à partir de la ligne de commande en utilisant les indicateurs:

    --enable-logging --v=1

    Cela enregistre tout ce que Chrome fait en interne, mais il enregistre également tous les console.log()messages. Le fichier journal est appelé chrome_debug.loget se trouve dans le fichier User Data Directory.

  2. Filtrez le fichier journal que vous obtenez pour les lignes avec CONSOLE(\d+).

Notez que les journaux de la console n'apparaissent pas avec --incognito.

Waleed Abdulla
la source
3
semble que cela ne fonctionne pas sur mon mac os, il y a des journaux internes mais pas de Console.log ...
Nico
7
Cela n'enregistre pas les informations console.log dans le fichier journal. Sous Windows 8.
coderama
4
Sur Mac, j'ai trouvé le fichier journal à ~ / Library / Application Support / Google / Chrome / chrome_debug.log
vaichidrewar
2
Cela fonctionne toujours pour moi sur OSX 10.10.3 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-logging --v=1avec le journal enregistré dans~/Library/Application Support/Google/Chrome/chrome_debug.log
mateuscb
3
Je n'obtiens rien d'autre que les journaux internes de chrome. Mes console.log()lignes ne sont nulle part dans ce fichier. Quelqu'un a une solution pour cela?
xandermonkey
187

Bonnes nouvelles

Les outils de développement Chrome vous permettent désormais d'enregistrer la sortie de la console dans un fichier de manière native

  1. Ouvrez la console
  2. Clic-droit
  3. Sélectionnez "enregistrer sous .."

enregistrer la console dans un fichier

Instructions pour les développeurs Chrome ici .

adardesign
la source
3
Cela peut-il être fait à l'aide d'un raccourci clavier ou en exécutant une commande sur la console?
Sarthak Singhal
1
Voici une liste de tous les raccourcis devTools developer.chrome.com/devtools/docs/shortcuts
adardesign
11
Cela ne semble pas copier la trace de la pile
Michael
2
Pouvez-vous ouvrir à nouveau ce fichier dans la console? Si oui, comment faites-vous cela?
Mahathi Vempati
7
Notez que cela ne développera pas les objets - cela imprimera toujours de gros objets dans leur forme tronquée, par exemple {a: 1, b: 2, c: 3, ...}.
Galen Long
29

Il existe un plugin javascript open source qui fait exactement cela, mais pour n'importe quel navigateur - debugout.js

Debugout.js enregistre et enregistre console.logs pour que votre application puisse y accéder. Divulgation complète, je l'ai écrit. Il met en forme différents types de manière appropriée, peut gérer des objets et des tableaux imbriqués et peut éventuellement mettre un horodatage à côté de chaque journal. Vous pouvez également basculer la journalisation en direct à un seul endroit, et sans avoir à supprimer toutes vos instructions de journalisation.

inorganik
la source
4
Pour référence, bien que cela ressemble à un excellent outil, il ne capturera pas la sortie du navigateur, comme lorsque le chargement d'image échoue, ou toute autre sortie de la console intégrée, et cela nécessite que vous réécriviez vos instructions de journal en utilisant une syntaxe spéciale.
Lukus
@Lukus il ne capturera certainement pas la sortie du navigateur (vous auriez besoin d'un patch monkey pour le faire) mais il n'y a pas de syntaxe spéciale nécessaire. passez les mêmes arguments que vous le feriez pour console.log
inorganik
1
@Inorganik Je cherchais un moyen pour les tests de sélénium de capturer la sortie de la console, mais il sera utilisé pour un service de test afin que nous n'ayons pas le contrôle des sites Web de l'utilisateur. Je pense que votre outil est cool, mais il faudrait qu'un utilisateur réécrive ses instructions console.log existantes en tant que bugout.log, c'est ce que j'entendais par syntaxe spéciale. Il semble jusqu'à présent qu'il n'existe aucun moyen multi-navigateurs de le faire cette fois.
Lukus
Non, cela ne fonctionnera pas pour nous. Nous devons enregistrer le journal des résultats des tests du site Web complexe avec une grande quantité de scripts tiers, qui s'exécutent sur différents domaines et nous ne pouvons pas modifier la plupart d'entre eux.
Mike Keskinov
23

J'ai trouvé un moyen simple et efficace pour cela.

  1. Dans la console - clic droit sur l'objet consigné de la console

  2. Cliquez sur 'Stocker comme variable globale'

  3. Voir le nom de la nouvelle variable - par exemple, il s'agit de variableName1

  4. Tapez dans la console: JSON.stringify (variableName1)

  5. Copiez le contenu de la chaîne variable: par exemple {"a": 1, "b": 2, "c": 3}

entrez la description de l'image ici

  1. Accédez à un éditeur en ligne JSON: par exemple https://jsoneditoronline.org/

entrez la description de l'image ici

Combiner
la source
1
Semble maladroit en surface mais cela fonctionne plutôt bien. Dans les versions ultérieures, au bas de la sortie, il y a un bouton "Copier". J'appuie simplement dessus, puis j'ai un petit script qui enregistre le presse-papiers en tant que fichier .json et s'ouvre dans Visual Studio qui est très lisible. Le seul changement est que je fais JSON.stringify (temp1, null, 2) pour le rendre plus facile à lire. L'astuce ci-dessous pour enregistrer la console fonctionne également bien.
Wade Hatler
8

Pour un meilleur fichier journal (sans le non-sens du débogage de Chrome), utilisez:

--enable-logging --log-level=0

au lieu de --v=1cela, il y a trop d'informations.

Il fournira toujours les erreurs et les avertissements comme vous le feriez généralement dans la console Chrome.

mise à jour 18 mai 2020: En fait, je pense que ce n'est plus vrai. Je n'ai pas pu trouver les messages de la console quel que soit ce niveau de journalisation.

JohnP2
la source
7

Cela peut être utile ou non, mais sous Windows, vous pouvez lire le journal de la console à l'aide du suivi des événements pour Windows

http://msdn.microsoft.com/en-us/library/ms751538.aspx

Nos tests d'intégration sont exécutés dans .NET, j'utilise donc cette méthode pour ajouter le journal de la console à notre sortie de test. J'ai fait un exemple de projet de console à démontrer ici: https://github.com/jkells/chrome-trace

--enable-logging --v = 1 ne semble pas fonctionner sur la dernière version de Chrome.

Jared Kells
la source
3

Beaucoup de bonnes réponses mais pourquoi ne pas simplement utiliser JSON.stringify (your_variable)? Ensuite, prenez le contenu par copier-coller (supprimer les guillemets extérieurs). J'ai posté cette même réponse également sur: Comment enregistrer la sortie d'un console.log (objet) dans un fichier?

user1889992
la source
1
Pour les problèmes concernant " Uncaught TypeError: Conversion de la structure circulaire en JSON " , cela pourrait peut - être aider.
KtX2SkD
2

Il existe un autre outil open source qui vous permet de sauvegarder toutes les console.logsorties dans un fichier sur votre serveur - JS LogFlush (plug!).

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

  • Remplacement de console.log sans interface utilisateur entre les navigateurs - côté client.
  • système de stockage de journaux - côté serveur.

Démo

le plus en arrière
la source
2

Si vous exécutez un serveur Apache sur votre hôte local (ne le faites pas sur un serveur de production), vous pouvez également publier les résultats dans un script au lieu de l'écrire dans la console.

Donc au lieu de console.log, vous pouvez écrire:

JSONP('http://localhost/save.php', {fn: 'filename.txt', data: json});

Alors save.phppeux faire ça

<?php

 $fn = $_REQUEST['fn'];
 $data = $_REQUEST['data'];

 file_put_contents("path/$fn", $data);
supersan
la source
1
J'espère vraiment que personne ne téléchargera jamais cela sur un serveur en production 🙁. Cela entraîne un danger pour le serveur.
Dave Mackintosh
Vous n'avez pas lu la première ligne: "Si vous exécutez un serveur Apache sur votre hôte local"?
supersan
Votre rejet de mon message n'est pas justifié car ce serait incroyablement stupide pour quelqu'un d'exécuter un serveur de production sur "localhost" (où le JSONP demande des données de publication).
supersan
Je n'ai jamais voté contre votre réponse, j'ai simplement souligné le danger que représente ce script s'il était jamais téléchargé sur un serveur accessible au public.
Dave Mackintosh
1

Sous Linux (au moins), vous pouvez définir CHROME_LOG_FILE dans l'environnement pour que chrome écrive un journal de l'activité de la console dans le fichier nommé à chaque exécution. Le journal est écrasé à chaque démarrage de Chrome. De cette façon, si vous avez une session automatisée qui exécute Chrome, vous n'avez pas à changer la façon dont Chrome est démarré, et le journal est là après la fin de la session.

export CHROME_LOG_FILE = chrome.log

DrChandra
la source
0

De nos jours, c'est très simple - cliquez avec le bouton droit sur n'importe quel élément affiché dans le journal de la console et sélectionnez Enregistrer sous et enregistrez l'ensemble de la sortie du journal dans un fichier sur votre ordinateur.

Brianlmerritt
la source
0

les autres solutions de ce fil ne fonctionnaient pas sur mon mac. Voici un enregistreur qui enregistre une représentation sous forme de chaîne par intermittence en utilisant ajax. utilisez-le avec console.saveau lieu deconsole.log

var logFileString="";
var maxLogLength=1024*128;

console.save=function(){
  var logArgs={};

  for(var i=0; i<arguments.length; i++) logArgs['arg'+i]=arguments[i];
  console.log(logArgs);

  // keep a string representation of every log
  logFileString+=JSON.stringify(logArgs,null,2)+'\n';

  // save the string representation when it gets big
  if(logFileString.length>maxLogLength){
    // send a copy in case race conditions change it mid-save
    saveLog(logFileString);
    logFileString="";
  }
};

selon ce dont vous avez besoin, vous pouvez enregistrer cette chaîne ou simplement la console.logcopier et la coller. voici un ajax pour vous au cas où vous voudriez le sauvegarder:

function saveLog(data){
  // do some ajax stuff with data.
  var xhttp = new XMLHttpRequest();

  xhttp.onreadystatechange = function(){
    if (this.readyState == 4 && this.status == 200) {}
  }

  xhttp.open("POST", 'saveLog.php', true);
  xhttp.send(data);
}

le saveLog.phpdevrait ajouter les données à un fichier journal quelque part. Je n'avais pas besoin de cette partie, donc je ne l'inclus pas ici. :)

https://www.google.com/search?q=php+append+to+log

jaya
la source