Chromeのconsole.logをファイルに保存します


172

Chromeのconsole.log出力をファイルに保存する方法を知っている人はいますか?または、コンソールからテキストをコピーする方法は?

数時間の機能テストを実行していて、Chromeに数千行のconsole.log出力があるとします。どのように保存またはエクスポートしますか?


回答:


97

私は同じことをする必要があり、これは私が見つけた解決策です:

  1. フラグを使用してコマンドラインからログを有効にします。

    --enable-logging --v=1

    これにより、Chromeが内部で行うすべてのことが記録されますが、すべてのconsole.log()メッセージも記録されます。ログファイルが呼び出さchrome_debug.logれ、にありUser Data Directoryます。

  2. 取得するログファイルを行でフィルタリングしますCONSOLE(\d+)

と一緒にコンソールログが表示されないことに注意してください--incognito


3
私のMac OSでは動作しないようです。内部ログはありますが、Console.logはありません...
Nico

7
これはconsole.log情報をログファイルに保存しません。Windows 8の場合
coderama

4
Macでは、ログファイルは〜/ Library / Application Support / Google / Chrome / chrome_debug.log
vaichidrewar

2
これは、OSX 10.10.3 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-logging --v=1でログが保存された状態でも動作します~/Library/Application Support/Google/Chrome/chrome_debug.log
mateuscb 2015年

3
内部のChromeログ以外は何も取得しません。私のconsole.log()行はそのファイルのどこにもありません。誰かがこれを修正していますか?
xandermonkey

186

良いニュース

Chrome開発ツールで、コンソール出力をファイルにネイティブに保存できるようになりました

  1. コンソールを開く
  2. 右クリック
  3. 「名前を付けて保存」を選択します。

コンソールをファイルに保存

Chromeデベロッパー向けの手順はこちら


3
キーボードショートカットを使用したり、コンソールでコマンドを実行したりできますか?
Sarthak Singhal

1
これは、すべてのdevToolsショートカットのリストですdeveloper.chrome.com/devtools/docs/shortcuts
adardesign

11
これはスタックトレースをコピーしていないようです
Michael

2
そのファイルをもう一度コンソールで開くことはできますか?もしそうなら、どうやってそうするのですか?
Mahathi Vempati 2017年

7
これはオブジェクトを展開しないことに注意してください-それでも、大きなオブジェクトは切り捨てられた形式で印刷されます(例:){a: 1, b: 2, c: 3, ...}
Galen Long

29

それを行うオープンソースのjavascriptプラグインがありますが、どのブラウザー用でも-debugout.js

Debugout.jsは、アプリケーションがアクセスできるようにconsole.logsを記録して保存します。完全な開示、私はそれを書きました。さまざまなタイプを適切にフォーマットし、ネストされたオブジェクトと配列を処理でき、オプションで各ログの横にタイムスタンプを付けることができます。また、すべてのログステートメントを削除せずに、1か所でライブログを切り替えることもできます。


4
参考までに、これは優れたツールのように見えますが、画像の読み込みが失敗した場合や他の組み込みコンソール出力の場合のように、ブラウザーからの出力をキャプチャしません。また、特別な構文を使用してログステートメントを書き直す必要があります。
2015

@Lukusそれは確かにブラウザー出力をキャプチャしません(それを行うには猿のパッチが必要になります)が、特別な構文は必要ありません。console.logと同じ引数を渡します
inorganik

1
@Inorganikセレンテストでコンソール出力をキャプチャする方法を探していましたが、テストサービスで使用するため、ユーザーのWebサイトを制御できません。あなたのツールはすばらしいと思いますが、既存のconsole.logステートメントをbugout.logに書き換える必要があります。これが、特別な構文の意味です。今のところ、ブラウザ間で実行する方法はないようです。
ルクス

いいえ、機能しません。複雑なWebサイトのテスト結果のログを、さまざまなドメインで実行される大量のサードパーティスクリプトで保存する必要があり、それらのほとんどを変更することはできません。
Mike Keskinov 2017年

22

私はこれのための素晴らしくて簡単な方法を見つけました。

  1. コンソールで-コンソールに記録されたオブジェクトを右クリックします

  2. 「グローバル変数として保存」をクリックします

  3. 新しい変数の名前を確認します-たとえば、それはvariableName1です。

  4. コンソールに入力:JSON.stringify(variableName1)

  5. 可変文字列の内容をコピーします。例:{"a":1、 "b":2、 "c":3}

ここに画像の説明を入力してください

  1. JSONオンラインエディターに移動します。例:https : //jsoneditoronline.org/

ここに画像の説明を入力してください


1
表面上は不格好に見えますが、それはかなりうまく機能します。それ以降のバージョンでは、出力の下部に「コピー」ボタンがあります。それを押すだけで、クリップボードを.jsonファイルとして保存し、非常に読みやすいVisual Studioで開く小さなスクリプトを作成します。唯一の変更点は、読みやすくするためにJSON.stringify(temp1、null、2)を実行することです。コンソールを保存するための以下のトリックも同様に機能します。
ウェイドハトラー、2018

8

より良いログファイル(Chromeデバッグナンセンスなし)を使用するには:

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

代わりに、 --v=1情報が多すぎます。

Chromeコンソールに通常表示されるようなエラーと警告が表示されます。

2020年5月18日更新:実際、これはもう当てはまらないと思います。このログレベルが何であれ、コンソールメッセージを見つけることができませんでした。


7

これは役立つ場合とそうでない場合がありますが、Windowsでは、Event Tracing for Windowsを使用してコンソールログを読み取ることができます。

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

統合テストは.NETで実行されるため、この方法を使用してコンソールログをテスト出力に追加します。ここでデモンストレーションするサンプルコンソールプロジェクトを作成しました:https : //github.com/jkells/chrome-trace

--enable-logging --v = 1は最新バージョンのChromeでは機能しないようです。


3

良い答えはたくさんありますが、JSON.stringify(your_variable)を使用しないのはなぜですか?次に、コンテンツをコピーして貼り付けます(外側の引用符を削除します)。私もこの同じ答えを投稿しました:console.log(object)の出力をファイルに保存する方法は?


1
程度の問題については、「キャッチされない例外TypeError:JSONに円形構造の変換、多分これは役立つかもしれません。
KtX2SkD 2017年

2

すべてのconsole.log出力をサーバー上のファイルに保存できる別のオープンソースツール、JS LogFlush(plug!)があります。

JS LogFlushは、以下を含む統合されたJavaScriptロギングソリューションです。

  • クロスブラウザUIを使用しないconsole.logの置き換え-クライアント側。
  • ログストレージシステム-サーバー側。

デモ


2

ローカルホストでApacheサーバーを実行している場合(運用サーバーではこれを行わないでください)、結果をコンソールに書き込む代わりにスクリプトに投稿することもできます。

したがって、の代わりにconsole.log、次のように書くことができます。

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

その後save.php、これを行うことができます

<?php

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

 file_put_contents("path/$fn", $data);

1
これが本番環境のサーバーにアップロードされないように願っています。これはサーバーにとって危険です。
デイブマッキントッシュ

最初の行を読みませんでした:「ローカルホストでApacheサーバーを実行している場合」?
スーパーサン2017

「localhost」(JSONPが投稿データをリクエストする場所)で本番サーバーを実行するのは信じられないほど愚かなので、私の投稿に対する反対票は正当化されません。
スーパーサン2017

私はあなたの回答に反対票を投じることはなく、このスクリプトが一般公開されているサーバーにアップロードされた場合に生じる危険性を指摘しただけです。
デイブマッキントッシュ2017

1

Linuxでは(少なくとも)、環境でCHROME_LOG_FILEを設定して、実行するたびにChromeがコンソールアクティビティのログを名前付きファイルに書き込むようにすることができます。ログは、chromeが起動するたびに上書きされます。このように、Chromeを実行する自動セッションがある場合、Chromeの起動方法を変更する必要はなく、セッションの終了後にログが存在します。

CHROME_LOG_FILE = chrome.logをエクスポートします


0

最近は非常に簡単です。コンソールログに表示されている項目を右クリックし、[名前を付けて保存]を選択して、ログ出力全体をコンピューター上のファイルに保存します。


0

このスレッドの他のソリューションは私のMacでは動作しませんでした。以下は、ajaxを使用して断続的に文字列表現を保存するロガーです。console.save代わりにそれを使うconsole.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="";
  }
};

必要に応じて、その文字列を保存するか、それだけconsole.logをコピーして貼り付けます。保存したい場合のためのajaxを以下に示します。

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

これsaveLog.phpにより、ログファイルのどこかにデータが追加されます。その部分は必要なかったので、ここには含めません。:)

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.