Speichern Sie das console.log in Chrome in einer Datei


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.


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 .


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.


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


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.


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.



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


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

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


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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.