将Chrome中的console.log保存到文件中


Answers:


98

我需要做同样的事情,这是我发现的解决方案:

  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,2015年

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
除了内部镀铬原木,我什么也没得到。我的console.log()台词不在那个文件中。有人为此解决吗?
xandermonkey

187

好消息

Chrome开发人员工具现在允许您将控制台输出本地保存到文件中

  1. 打开控制台
  2. 右键点击
  3. 选择“另存为..”

将控制台保存到文件

Chrome Developer的说明在这里


3
可以使用键盘快捷键或在控制台上运行命令来完成此操作吗?
Sarthak Singhal 2015年


11
这似乎没有复制堆栈跟踪信息
Michael

2
您可以再次在控制台中打开该文件吗?如果是这样,您如何处理?
Mahathi Vempati

7
请注意,这不会展开对象-仍会以截断形式打印大对象,例如{a: 1, b: 2, c: 3, ...}
加伦·朗

29

有一个开源的javascript插件可以做到这一点,但是对于任何浏览器-debugout.js

Debugout.js记录并保存console.logs,以便您的应用程序可以访问它们。完全披露,是我写的。它可以适当地设置不同类型的格式,可以处理嵌套的对象和数组,还可以选择在每个日志旁边放置一个时间戳。您也可以在一个位置切换实时日志记录,而不必删除所有日志记录语句。


4
作为参考,尽管它看起来很不错,但是它不会捕获浏览器的输出(例如,图像加载失败时)或其他内置控制台输出,并且它要求您使用特殊语法重写日志语句。
卢克斯2015年

@Lukus当然不会捕获浏览器输出(您需要一个猴子补丁才能做到),但是并不需要特殊的语法。通过同样的ARGS,你会CONSOLE.LOG
inorganik

1
@Inorganik我正在寻找一种硒测试方法来捕获控制台输出,但是它将用于测试服务,因此我们无法控制用户的网站。我认为您的工具很酷,但是它要求用户将其现有的console.log语句重写为bugout.log,这就是我所说的特殊语法。到目前为止,看来这一次没有跨浏览器的方法。
卢克斯2015年

不,它对我们不起作用。我们需要使用大量运行在不同域上的大量第三方脚本来保存复杂网站的测试结果日志,我们无法更改其中的大多数内容。
Mike Keskinov

23

我已经找到了一种简便的方法。

  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)以使其更易于阅读。下面的保存控制台的技巧也很好用。
韦德·哈特勒

8

为了获得更好的日志文件(没有Chrome调试废话),请使用:

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

而不是 --v=1太多的信息。

它仍然会提供错误和警告,就像您通常在Chrome控制台中看到的一样。

2020年5月18日更新:实际上,我认为这不再正确。无论此日志记录级别如何,我都找不到控制台消息。


7

这可能有帮助,也可能没有帮助,但在Windows上,您可以使用Windows事件跟踪功能读取控制台日志

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

我们的集成测试在.NET中运行,因此我使用此方法将控制台日志添加到我们的测试输出中。我已经制作了一个示例控制台项目以在此处进行演示:https : //github.com/jkells/chrome-trace

--enable-logging --v = 1似乎不适用于最新版本的Chrome。



2

还有另一个开源工具,它允许您将所有console.log输出保存在服务器上的文件中-JS LogFlush(插件!)。

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服务器”?
supersan '17

您对我的帖子投下反对票是没有道理的,因为对于在“ localhost”(JSONP请求发布数据的地方)上运行生产服务器的人来说,这是非常愚蠢的。
supersan '02

我从未对您的答案投反对票,我只是指出了如果将该脚本上载到可供公众使用的服务器,则会带来危险。
Dave Mackintosh

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.