Comment enregistrer la sortie d'un console.log (objet) dans un fichier?

240

J'ai essayé d'utiliser JSON.stringify(object), mais cela ne descend pas sur toute la structure et la hiérarchie.

D'un autre côté, console.log(object)cela fait, mais je ne peux pas l'enregistrer.

Dans la console.logsortie, je peux développer un par un tous les enfants et sélectionner et copier / coller, mais la structure est trop grande pour cela.

Eduard Florinescu
la source
Essayez-vous d'enregistrer le fichier console.log à partir du navigateur à des fins de développement? Cela pourrait être utile si vous expliquiez quel est votre objectif final.
travis
1
@MichaelS Je n'ai pas trouvé l'objet dans le fichier journal.
Eduard Florinescu
@travis Je veux exporter un objet vers JSON, mais toute la hiérarchie, aussi ses propriétés et les propriétés de ses propriétés. Je veux pratiquement obtenir "l'interface" d'un objet sauf l'implémentation des fonctions.
Eduard Florinescu
2
@MichaelS, ces questions concernent la sauvegarde de l'intégralité du journal, cette question concerne la sauvegarde d'un seul objet. Ils sont distincts de mon point de vue.
James McMahon

Réponses:

307

Mise à jour: vous pouvez maintenant faire un clic droit

Cliquez avec le bouton droit sur> Enregistrer sous dans le panneau de la console pour enregistrer les messages enregistrés dans un fichier.

Réponse originale:

Vous pouvez utiliser cet extrait de devtools illustré ci-dessous pour créer une méthode console.save. Il crée un FileBlob à partir de l'entrée, puis le télécharge automatiquement.

(function(console){

console.save = function(data, filename){

    if(!data) {
        console.error('Console.save: No data')
        return;
    }

    if(!filename) filename = 'console.json'

    if(typeof data === "object"){
        data = JSON.stringify(data, undefined, 4)
    }

    var blob = new Blob([data], {type: 'text/json'}),
        e    = document.createEvent('MouseEvents'),
        a    = document.createElement('a')

    a.download = filename
    a.href = window.URL.createObjectURL(blob)
    a.dataset.downloadurl =  ['text/json', a.download, a.href].join(':')
    e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
    a.dispatchEvent(e)
 }
})(console)

Source: http://bgrins.github.io/devtools-snippets/#console-save

Patrick
la source
2
Je ne suis pas de ceux qui lâchent "Merci" partout jusqu'à ce que la réponse soit bloquée pour éviter de "merci". Mais merci. Je vais construire une extension.
Léon Pelletier
14
La fonction Enregistrer sous ... n'a en fait pas aidé. Il n'enregistre pas l'objet JSON complet (dans mon cas, j'avais un tableau d'objets, les propriétés des objets n'étaient pas exportées dans le fichier de sortie). Mais j'espère que le bon vieux devtool-snippet que vous avez collé a fonctionné comme un charme. Merci
M. Kejji
1
si enregistrer comme n'a pas fonctionné, c'est une régression. vous devez déposer un bogue sur crbug.com
Patrick
1
@ ishandutta2007, vous ne devriez télécharger aucun extrait de code - il est maintenant intégré à la console.
Patrick
10
Le clic droit n'effectuera pas une sauvegarde approfondie de l'objet.
user1032531
246

Si vous avez un objet enregistré:

  • Faites un clic droit sur l'objet dans la console et cliquez sur Store as a global variable
  • la sortie sera quelque chose comme temp1
  • taper dans la console copy(temp1)
  • coller dans votre éditeur de texte préféré
artemdev
la source
1
J'ai également constaté qu'en collant cela dans konklone.io/json, vous pouvez ensuite le récupérer rapidement dans un fichier CSV et à partir de là dans Excel.
PeteW
9
Je reçois seulement [object Object]
norbidrak
1
La console dit "non défini", mais cela ne signifie pas en cas d'échec. Il le copie toujours dans le presse-papiers :)
Dean
1
Une solution géniale. Merci beaucoup!
Ben Rondeau
1
De loin la solution la plus simple et la plus fiable!
Chris B.
130

Vous pouvez utiliser la commande API Chrome DevTools Utilitiescopy() pour copier la représentation sous forme de chaîne de l'objet spécifié dans le presse-papiers.

Si vous avez beaucoup d'objets, vous pouvez en fait JSON.stringify () tous vos objets et continuer à les ajouter à une chaîne. Utilisez maintenant la copy()méthode pour copier la chaîne complète dans le presse-papiers.

bthota
la source
13
Utilisation: copie (objet)
antoine
Remarque: vous pouvez utiliserrequire("util").format(...) au lieu d'appliquer JSON.stringify()un par un. Le utilmodule sur NPM fonctionne à la fois sur Node.js et sur les navigateurs Web.
Константин Ван
2
Si vous tapez copy (object) et qu'il retourne 'undefined', c'est en fait un succès. L'objet est maintenant dans votre presse-papiers et peut être collé.
Dean
7

Il existe un plugin javascript open source qui fait exactement cela - 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 formate 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. Il active également la journalisation en direct à un seul endroit.

inorganik
la source
Je reçois une erreur -SyntaxError: export declarations may only appear at top level of a module --> debugout.js:9
Senura Dissanayake
@SenuraDissanayake essayez maintenant - j'ai dû annuler le RP de quelqu'un que je n'ai pas testé: /
inorganik
3

clic droit sur la console .. cliquez sur enregistrer sous .. c'est aussi simple que cela .. vous obtiendrez un fichier texte de sortie

Akhil_S
la source
juste sans aucune indication de ce qui est erreur vs déclin vs journal.
Paulius Liekis
2

Vous pouvez utiliser la bibliothèque l2i( https://github.com/seriyvolk83/logs2indexeddb ) pour enregistrer tout ce que vous y mettez console.log , puis invoquer

l2i.download();

pour télécharger un fichier avec des journaux.

Alexander Volkov
la source
2

Il existe un autre outil open source qui vous permet d'enregistrer 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 sans interface utilisateur multi-navigateur de console.log - côté client.
  • système de stockage des journaux - côté serveur.

Démo

le plus en arrière
la source
2

C'est vraiment tard pour la fête, mais ça va peut-être aider quelqu'un. Ma solution semble similaire à ce que l'OP a décrit comme problématique, mais c'est peut-être une fonctionnalité que Chrome propose maintenant, mais pas à ce moment-là. J'ai essayé de cliquer avec le bouton droit et d'enregistrer le fichier .log après que l'objet a été écrit sur la console, mais tout ce qui m'a donné était un fichier texte avec ceci:

console.js: 230 Terminé: Array (50000) [0… 9999] [10000… 19999] [20000… 29999] [30000… 39999] [40000… 49999] longueur: 50000__proto__: Array (0)

qui n’était utile à personne.

Ce que j'ai fini par faire était de trouver le console.log(data)dans le code, d'y déposer un point d'arrêt puis de taper JSON.Stringify(data)dans la console qui affichait l'objet entier sous forme de chaîne JSON et la console Chrome vous donne en fait un bouton pour le copier . Ensuite, collez-le dans un éditeur de texte et voici votre JSON

entrez la description de l'image ici

Adam Hey
la source
il dit qu'à la fin le texte long a été tronqué , si votre presse Copier copie- t-il l'intégralité des 20,6 Mo?
Eduard Florinescu
1
@EduardFlorinescu oui, tout
Adam Hey