Speichern Sie das console.log in Chrome in einer Datei

172

Kennt jemand eine Möglichkeit, die Ausgabe von console.log in Chrome in einer Datei zu speichern? Oder wie kopiere ich den Text aus der Konsole?

Angenommen, Sie führen einige Stunden Funktionstests durch und haben Tausende von Zeilen der Ausgabe von console.log in Chrome. Wie speichert oder exportiert man es?

eeejay
quelle

Antworten:

97

Ich musste das Gleiche tun und dies ist die Lösung, die ich gefunden habe:

  1. Aktivieren Sie die Protokollierung über die Befehlszeile mithilfe der Flags:

    --enable-logging --v=1

    Dies protokolliert alles, was Chrome intern tut, aber es protokolliert auch alle console.log()Nachrichten. Die Protokolldatei wird aufgerufen chrome_debug.logund befindet sich in der User Data Directory.

  2. Filtern Sie die Protokolldatei, die Sie erhalten, nach Zeilen mit CONSOLE(\d+).

Beachten Sie, dass Konsolenprotokolle nicht mit angezeigt werden --incognito.

Waleed Abdulla
quelle
3
Anscheinend funktioniert es nicht auf meinem Mac OS. Es gibt interne Protokolle, aber kein Console.log ...
Nico
7
Dadurch werden die Informationen zu console.log nicht in der Protokolldatei gespeichert. In Windows 8.
Coderama
4
Auf dem Mac fand ich die Protokolldatei unter ~ / Library / Application Support / Google / Chrome / chrome_debug.log
vaichidrewar
2
Dies funktioniert immer noch für mich unter OSX 10.10.3 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-logging --v=1mit dem Protokoll gespeichert in~/Library/Application Support/Google/Chrome/chrome_debug.log
mateuscb
3
Ich bekomme nichts anderes als die internen Chromprotokolle. Meine console.log()Zeilen befinden sich nirgends in dieser Datei. Hat jemand eine Lösung dafür?
Xandermonkey
186

Gute Nachrichten

Mit den Chrome-Entwicklungstools können Sie jetzt die Konsolenausgabe nativ in einer Datei speichern

  1. Öffnen Sie die Konsole
  2. Rechtsklick
  3. Wählen Sie "Speichern unter .."

Konsole in Datei speichern

Anweisungen für Chrome-Entwickler hier .

Adardesign
quelle
3
Kann dies über eine Tastenkombination oder durch Ausführen eines Befehls auf der Konsole erfolgen?
Sarthak Singhal
1
Hier ist eine Liste aller devTools-Verknüpfungen developer.chrome.com/devtools/docs/shortcuts
adardesign
11
Dies scheint nicht die Stapelverfolgung zu kopieren
Michael
2
Können Sie diese Datei in der Konsole erneut öffnen? Wenn ja, wie machst du das?
Mahathi Vempati
7
Beachten Sie, dass dadurch keine Objekte erweitert werden. Es werden weiterhin große Objekte in ihrer abgeschnittenen Form gedruckt, z {a: 1, b: 2, c: 3, ...}.
Galen Long
29

Es gibt ein Open-Source-Javascript-Plugin, das genau das tut, aber für jeden Browser - 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. Sie können die Live-Protokollierung auch an einer Stelle umschalten, ohne alle Ihre Protokollierungsanweisungen entfernen zu müssen.

anorganik
quelle
4
Obwohl dies wie ein großartiges Tool aussieht, erfasst es keine Ausgabe vom Browser, z. B. wenn das Laden von Bildern fehlschlägt, oder eine andere integrierte Konsolenausgabe, und es erfordert, dass Sie Ihre Protokollanweisungen mit einer speziellen Syntax neu schreiben.
Lukus
@Lukus wird die Browserausgabe sicherlich nicht erfassen (dazu benötigen Sie einen Affen-Patch), aber es ist keine spezielle Syntax erforderlich. Übergeben Sie die gleichen Argumente wie bei console.log
inorganik
1
@Inorganik Ich habe nach einer Möglichkeit für Selentests gesucht, um die Konsolenausgabe zu erfassen, aber sie wird für einen Testdienst verwendet, damit wir keine Kontrolle über die Websites des Benutzers haben. Ich denke, Ihr Tool ist cool, aber es würde erfordern, dass ein Benutzer seine vorhandenen console.log-Anweisungen als bugout.log umschreibt, das habe ich mit spezieller Syntax gemeint. Es scheint so weit, dass es diesmal keine browserübergreifende Möglichkeit gibt, dies zu tun.
Lukus
Nein, es wird bei uns nicht funktionieren. Wir müssen das Ergebnisprotokoll der komplexen Website mit einer großen Anzahl von Skripten von Drittanbietern speichern, die auf verschiedenen Domänen ausgeführt werden, und wir können die meisten davon nicht ändern.
Mike Keskinov
22

Ich habe einen großartigen und einfachen Weg dafür gefunden.

  1. Klicken Sie in der Konsole mit der rechten Maustaste auf das protokollierte Objekt der Konsole

  2. Klicken Sie auf "Als globale Variable speichern".

  3. Siehe den Namen der neuen Variablen - z. B. variableName1

  4. Geben Sie die Konsole ein: JSON.stringify (variableName1)

  5. Kopieren Sie den Inhalt der variablen Zeichenfolge: zB {"a": 1, "b": 2, "c": 3}

Geben Sie hier die Bildbeschreibung ein

  1. Gehen Sie zu einem JSON-Online-Editor: z. B. https://jsoneditoronline.org/

Geben Sie hier die Bildbeschreibung ein

Kombinieren
quelle
1
Scheint an der Oberfläche klobig, aber es funktioniert ziemlich gut. In späteren Versionen befindet sich am unteren Rand der Ausgabe eine Schaltfläche "Kopieren". Ich drücke einfach darauf und habe dann ein kleines Skript, das die Zwischenablage als .json-Datei speichert und in Visual Studio öffnet, das sehr gut lesbar ist. Die einzige Änderung ist, dass ich JSON.stringify (temp1, null, 2) mache, um das Lesen zu erleichtern. Der folgende Trick zum Speichern der Konsole funktioniert ebenfalls gut.
Wade Hatler
8

Für eine bessere Protokolldatei (ohne den Chrome-Debug-Unsinn) verwenden Sie:

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

stattdessen --v=1gibt es einfach zu viele info.

Es werden weiterhin die Fehler und Warnungen angezeigt, die normalerweise in der Chrome-Konsole angezeigt werden.

Update 18. Mai 2020: Eigentlich denke ich, dass dies nicht mehr stimmt. Ich konnte die Konsolenmeldungen innerhalb dieser Protokollierungsstufe nicht finden.

JohnP2
quelle
7

Dies kann hilfreich sein oder auch nicht, aber unter Windows können Sie das Konsolenprotokoll mithilfe der Ereignisverfolgung für Windows lesen

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

Unsere Integrationstests werden in .NET ausgeführt, daher verwende ich diese Methode, um das Konsolenprotokoll zu unserer Testausgabe hinzuzufügen. Ich habe ein Beispiel für ein Konsolenprojekt erstellt, um es hier zu demonstrieren: https://github.com/jkells/chrome-trace

--enable-logging --v = 1 scheint auf der neuesten Version von Chrome nicht zu funktionieren.

Jared Kells
quelle
3

Viele gute Antworten, aber warum nicht einfach JSON.stringify (your_variable) verwenden? Nehmen Sie dann den Inhalt per Kopieren und Einfügen (entfernen Sie äußere Anführungszeichen). Ich habe dieselbe Antwort auch unter: Wie speichere ich die Ausgabe eines console.log (Objekts) in einer Datei?

user1889992
quelle
1
Bei Problemen mit " Uncaught TypeError: Konvertieren einer Kreisstruktur in JSON " könnte dies möglicherweise helfen.
KtX2SkD
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

Wenn Sie einen Apache-Server auf Ihrem lokalen Host ausführen (tun Sie dies nicht auf einem Produktionsserver), können Sie die Ergebnisse auch in einem Skript veröffentlichen, anstatt sie in die Konsole zu schreiben.

Stattdessen console.logkönnen Sie schreiben:

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

Dann save.phpkann man das machen

<?php

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

 file_put_contents("path/$fn", $data);
Supersan
quelle
1
Ich hoffe wirklich, dass niemand dies jemals auf einen Server in der Produktion hochlädt 🙁. Dies ist mit einer Gefahr für den Server verbunden.
Dave Mackintosh
Haben Sie nicht die erste Zeile gelesen: "Wenn Sie einen Apache-Server auf Ihrem lokalen Host ausführen"?
Supersan
Ihre Ablehnung meines Beitrags ist nicht gerechtfertigt, da es für jemanden unglaublich dumm wäre, einen Produktionsserver auf "localhost" auszuführen (wo der JSONP Beitragsdaten anfordert).
Supersan
Ich habe Ihre Antwort nie abgelehnt. Ich habe lediglich auf die Gefahr hingewiesen, die dieses Skript darstellt, wenn es jemals auf einen öffentlich zugänglichen Server hochgeladen wird.
Dave Mackintosh
1

Unter Linux (zumindest) können Sie CHROME_LOG_FILE in der Umgebung so einstellen, dass Chrome bei jeder Ausführung ein Protokoll der Konsolenaktivität in die angegebene Datei schreibt. Das Protokoll wird bei jedem Start von Chrome überschrieben. Auf diese Weise müssen Sie bei einer automatisierten Sitzung, in der Chrome ausgeführt wird, die Art und Weise, wie Chrome gestartet wird, nicht ändern, und das Protokoll ist nach Beendigung der Sitzung vorhanden.

export CHROME_LOG_FILE = chrome.log

DrChandra
quelle
0

Heutzutage ist es sehr einfach - klicken Sie mit der rechten Maustaste auf ein Element im Konsolenprotokoll und wählen Sie Speichern unter und speichern Sie die gesamte Protokollausgabe in einer Datei auf Ihrem Computer.

brianlmerritt
quelle
0

Die anderen Lösungen in diesem Thread funktionierten auf meinem Mac nicht. Hier ist ein Logger, der eine Zeichenfolgendarstellung mit Ajax zeitweise speichert. benutze es mit console.savestattconsole.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="";
  }
};

Je nachdem, was Sie benötigen, können Sie diese Zeichenfolge oder nur console.logdiese speichern und kopieren und einfügen. Hier ist ein Ajax für Sie, falls Sie ihn speichern möchten:

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);
}

Das saveLog.phpsollte die Daten irgendwo an eine Protokolldatei anhängen. Ich brauchte diesen Teil nicht, also füge ich ihn hier nicht ein. :) :)

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

Jaya
quelle