【发布时间】:2011-11-29 10:31:24
【问题描述】:
有谁知道将 Chrome 中的 console.log 输出保存到文件的方法?或者如何将文本复制出控制台?
假设您正在运行几个小时的功能测试,并且在 Chrome 中输出了数千行 console.log。如何保存或导出?
【问题讨论】:
标签: google-chrome console logging
有谁知道将 Chrome 中的 console.log 输出保存到文件的方法?或者如何将文本复制出控制台?
假设您正在运行几个小时的功能测试,并且在 Chrome 中输出了数千行 console.log。如何保存或导出?
【问题讨论】:
标签: google-chrome console logging
我需要做同样的事情,这是我找到的解决方案:
使用标志从命令行启用logging:
--enable-logging --v=1
这会记录 Chrome 在内部执行的所有操作,但也会记录所有 console.log() 消息。日志文件名为 chrome_debug.log,位于 User Data Directory 中,可以通过提供 --user-data-dir=PATH (more info here) 覆盖。
CONSOLE(\d+) 的行。请注意,--incognito 不会显示控制台日志。
【讨论】:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-logging --v=1 上仍然有效,日志保存在 ~/Library/Application Support/Google/Chrome/chrome_debug.log
console.log() 行不在该文件中。有没有人可以解决这个问题?
copy(temp1) 并按回车键(将temp1 替换为上一步中的变量名)。现在记录的值被复制到您的剪贴板。如果您不想在 Chrome 中更改标志/设置并且不想处理 JSON 字符串化和解析等,这是一种特别好的方法。
更新:我刚刚找到了这个解释我建议的图片更容易理解https://scottwhittaker.net/chrome-devtools/2016/02/29/chrome-devtools-copy-object.html
【讨论】:
我已经找到了一个非常简单的方法。
在控制台中 - 右键单击控制台记录的对象
点击“存储为全局变量”
查看新变量的名称 - 例如它是变量名1
在控制台输入:JSON.stringify(variableName1)
复制变量字符串内容:e.g. {"a":1,"b":2,"c":3}
【讨论】:
为了更好的日志文件(没有 Chrome 调试废话)使用:
--enable-logging --log-level=0
而不是
--v=1 信息太多了。
它仍会提供您通常在 Chrome 控制台中看到的错误和警告。
2020 年 5 月 18 日更新:实际上,我认为这不再正确。无论此日志记录级别是什么,我都找不到控制台消息。
【讨论】:
此线程中的其他解决方案不适用于我的 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 应该将数据附加到某处的日志文件中。我不需要那个部分,所以我不在这里包括它。 :)
【讨论】:
在 Linux 上(至少)您可以在环境中设置 CHROME_LOG_FILE 以让 chrome 在每次运行时将控制台活动的日志写入指定文件。每次 chrome 启动时,日志都会被覆盖。这样,如果您有一个运行 chrome 的自动会话,则无需更改 chrome 的启动方式,并且在会话结束后日志就在那里。
导出 CHROME_LOG_FILE=chrome.log
【讨论】:
现在这很容易 - 右键单击控制台日志中显示的任何项目并选择另存为并将整个日志输出保存到计算机上的文件中。
【讨论】:
如果您在本地主机上运行 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);
【讨论】:
很多很好的答案,但为什么不直接使用 JSON.stringify(your_variable) 呢?然后通过复制和粘贴获取内容(删除外部引号)。我也发布了同样的答案:How to save the output of a console.log(object) to a file?
【讨论】:
【讨论】:
{a: 1, b: 2, c: 3, ...}.
还有另一个开源工具,可让您将所有 console.log 输出保存在服务器上的文件中 - JS LogFlush(插入!)。
JS LogFlush 是一个集成的 JavaScript 日志记录解决方案,包括:
- console.log 的跨浏览器 UI 替换 - 在客户端。
- 日志存储系统 - 在服务器端。
【讨论】:
有一个开源 javascript 插件可以做到这一点,但适用于任何浏览器 - debugout.js
Debugout.js 记录并保存 console.logs,以便您的应用程序可以访问它们。完全公开,我写的。它可以适当地格式化不同的类型,可以处理嵌套对象和数组,并且可以选择在每个日志旁边放置一个时间戳。您还可以在一处切换实时日志记录,而无需删除所有日志记录语句。
【讨论】:
这可能有用也可能没用,但在 Windows 上,您可以使用 Windows 事件跟踪来读取控制台日志
http://msdn.microsoft.com/en-us/library/ms751538.aspx
我们的集成测试在 .NET 中运行,因此我使用此方法将控制台日志添加到我们的测试输出中。我制作了一个示例控制台项目来演示:https://github.com/jkells/chrome-trace
--enable-logging --v=1 似乎不适用于最新版本的 Chrome。
【讨论】: