Wie speichere ich die Ausgabe eines console.log (Objekts) in einer Datei?

239

Ich habe es versucht JSON.stringify(object), aber es geht nicht um die gesamte Struktur und Hierarchie.

Auf der anderen Seite console.log(object)tut das, aber ich kann es nicht speichern.

In der console.logAusgabe kann ich nacheinander alle untergeordneten Elemente erweitern und auswählen und kopieren / einfügen, aber die Struktur ist dafür zu groß.

Eduard Florinescu
quelle
Versuchen Sie, das console.log für Entwicklungszwecke im Browser zu speichern? Es könnte hilfreich sein, wenn Sie erklären, was Ihr Endziel ist.
Travis
1
@MichaelS Ich habe das Objekt nicht in der Protokolldatei gefunden.
Eduard Florinescu
@travis Ich möchte ein Objekt nach JSON exportieren, aber die gesamte Hierarchie, auch seine Eigenschaften und die Eigenschaften seiner Eigenschaften. Ich möchte praktisch die "Schnittstelle" eines Objekts mit Ausnahme der Implementierung der Funktionen erhalten.
Eduard Florinescu
2
@MichaelS, bei diesen Fragen geht es um das Speichern des gesamten Protokolls. Bei dieser Frage geht es um das Speichern eines einzelnen Objekts. Sie unterscheiden sich von meinem Standpunkt.
James McMahon

Antworten:

305

Update: Sie können jetzt einfach mit der rechten Maustaste klicken

Klicken Sie im Konsolenfenster mit der rechten Maustaste auf> Speichern unter, um die protokollierten Nachrichten in einer Datei zu speichern.

Ursprüngliche Antwort:

Mit diesem unten gezeigten devtools-Snippet können Sie eine console.save-Methode erstellen. Es erstellt einen FileBlob aus der Eingabe und lädt ihn dann automatisch herunter.

(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)

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

Patrick
quelle
2
Ich bin nicht von denen, die überall "Danke" fallen lassen, bis die Antwort blockiert ist, um "Danke" zu verhindern. Aber danke. Ich werde eine Erweiterung bauen.
Léon Pelletier
14
Die Funktion Speichern unter ... hat eigentlich nicht geholfen. Das vollständige JSON-Objekt wird nicht gespeichert (in meinem Fall hatte ich ein Array von Objekten, die Objekteigenschaften wurden nicht in die Ausgabedatei exportiert). Aber hoffentlich hat das gute alte Devtool-Snippet, das Sie eingefügt haben, wie ein Zauber gewirkt. Vielen Dank
M. Kejji
1
Wenn das Speichern als nicht funktioniert hat, handelt es sich um eine Regression. Sie sollten einen Fehler bei crbug.com einreichen
Patrick
1
@ ishandutta2007 Sie sollten kein Snippet herunterladen - es ist jetzt in die Konsole integriert.
Patrick
10
Ein Rechtsklick führt keine tiefe Speicherung des Objekts durch.
user1032531
245

Falls Sie ein Objekt protokolliert haben:

  • Klicken Sie mit der rechten Maustaste auf das Objekt in der Konsole und klicken Sie auf Store as a global variable
  • Die Ausgabe wird so etwas wie sein temp1
  • Geben Sie die Konsole ein copy(temp1)
  • Einfügen in Ihren bevorzugten Texteditor
artemdev
quelle
1
Ich fand auch, dass Sie dies in konklone.io/json einfügen können, um es dann schnell in eine CSV-Datei und von dort in Excel zu bekommen.
PeteW
9
Ich bekomme nur [Objekt Objekt]
Norbidrak
1
Die Konsole sagt "undefiniert", aber das bedeutet nicht, wenn es fehlschlägt. Es kopiert es immer noch in die Zwischenablage :)
Dean
1
FANTASTISCHE Lösung. Vielen Dank!
Ben Rondeau
1
Mit Abstand die einfachste und zuverlässigste Lösung!
Chris B.
130

Mit dem API- copy()Befehl Chrome DevTools Utilities können Sie die Zeichenfolgendarstellung des angegebenen Objekts in die Zwischenablage kopieren.

Wenn Sie viele Objekte haben, können Sie tatsächlich alle Ihre Objekte mit JSON.stringify () versehen und sie weiterhin an eine Zeichenfolge anhängen. Verwenden Sie nun die copy()Methode, um die gesamte Zeichenfolge in die Zwischenablage zu kopieren.

bthota
quelle
13
Verwendung: Kopie (Objekt)
Antoine
Hinweis: Sie können verwenden,require("util").format(...) anstatt einzeln anzuwenden JSON.stringify(). Das utilModul auf NPM funktioniert sowohl mit Node.js als auch mit Webbrowsern.
3онстантин Ван
2
Wenn Sie copy (object) eingeben und "undefined" zurückgeben, ist dies tatsächlich ein Erfolg. Das Objekt befindet sich jetzt in Ihrer Zwischenablage und kann eingefügt werden.
Dean
7

Es gibt ein Open-Source-Javascript-Plugin, das genau das tut - debugout.js

Debugout.js zeichnet auf und speichert console.logs, damit Ihre Anwendung darauf zugreifen kann. Vollständige Offenlegung, ich habe es geschrieben. Es formatiert verschiedene Typen entsprechend, kann verschachtelte Objekte und Arrays verarbeiten und optional einen Zeitstempel neben jedes Protokoll setzen. Außerdem wird die Live-Protokollierung an einem Ort umgeschaltet.

anorganik
quelle
Ich SyntaxError: export declarations may only appear at top level of a module --> debugout.js:9
erhalte
@ SenuraDissanayake versuchen Sie es jetzt - ich musste jemandes PR zurücksetzen, die ich nicht getestet habe: /
inorganik
3

Klicken Sie mit der rechten Maustaste auf die Konsole. Klicken Sie auf Speichern unter. So einfach ist das. Sie erhalten eine Ausgabetextdatei

Akhil_S
quelle
Nur ohne einen Hinweis darauf, was Fehler gegen Abnehmen gegen Protokoll ist.
Paulius Liekis
2

Sie können die Bibliothek l2i( https://github.com/seriyvolk83/logs2indexeddb ) verwenden, um alles zu speichern, was Sie eingegeben console.log und dann aufgerufen haben

l2i.download();

um eine Datei mit Protokollen herunterzuladen.

Alexander Volkov
quelle
2

Es gibt ein weiteres Open-Source-Tool, mit dem Sie alle console.logAusgaben in einer Datei auf Ihrem Server speichern können - JS LogFlush (Plug!).

JS LogFlush ist eine integrierte JavaScript-Protokollierungslösung, die Folgendes umfasst:

  • browserübergreifende UI-freie Ersetzung von console.log - auf der Clientseite.
  • Protokollspeichersystem - auf der Serverseite.

Demo

hinterste
quelle
2

Das ist wirklich spät zur Party, aber vielleicht hilft es jemandem. Meine Lösung scheint dem zu ähneln, was das OP als problematisch beschrieben hat, aber vielleicht ist es eine Funktion, die Chrome jetzt bietet, aber nicht dann. Ich habe versucht, mit der rechten Maustaste zu klicken und die .log-Datei zu speichern, nachdem das Objekt in die Konsole geschrieben wurde, aber alles, was mir gab, war eine Textdatei mit folgendem:

console.js: 230 Fertig: Array (50000) [0… 9999] [10000… 19999] [20000… 29999] [30000… 39999] [40000… 49999] Länge: 50000__proto__: Array (0)

das war für niemanden von Nutzen.

console.log(data)Am Ende habe ich das im Code gefunden, einen Haltepunkt darauf abgelegt und dann JSON.Stringify(data)die Konsole eingegeben, die das gesamte Objekt als JSON-Zeichenfolge anzeigt, und die Chrome-Konsole gibt Ihnen tatsächlich eine Schaltfläche zum Kopieren . Fügen Sie dann in einen Texteditor ein und es gibt Ihren JSON

Geben Sie hier die Bildbeschreibung ein

Adam Hey
quelle
Es heißt, am Ende wurde Langtext abgeschnitten . Wenn Sie auf Kopieren klicken, werden die gesamten 20,6 MB kopiert.
Eduard Florinescu
1
@ EduardFlorinescu ja, alles
Adam Hey