从Google Chrome导出Javascript控制台日志

11

有没有办法将在Google Chrome中记录到的JavaScript控制台消息导出?

如果没有,是否有人能够建议一种好的方法来诊断客户端计算机上的JavaScript问题?尽管我已经设置了完全相同的环境,但我仍然无法在本地复现这些问题。

4个回答

18

步骤1:添加一些console.log语句来帮助诊断您的问题。

步骤2:在客户端系统上添加逻辑来重新定义console.log,使其实际将其参数保存到window.log(或其他名称)而不是将它们记录到控制台。

window.log = []
console = console || {"log":function(x) {window.log.push(x);}}

第三步:添加一个onUnload处理程序,通过AJAX请求将window.log的内容作为其参数之一发送到您的服务器

第四步:赚钱!;-)

这个系统的另一个额外好处是(一旦设置好),您可以随意使用console.log,无论您在开发环境还是生产环境中,它都会执行正确的操作。


有趣而棘手..但看起来很复杂!(特别是第三步)难道没有更简单的方法吗..? - Dexter
这其实非常简单,但为了展示我已经添加了第二个答案。 - machineghost
我还建议根本不要调用console.log,而是创建一个包装器,类似于 function vomitDebug(msg) {...} - 更容易扩展,并且客户端实际上有console.log的问题将消失。 - Joel Peltonen
太好了,正是我在寻找的东西。 - shriek
console.log(1, 2, 3); 只将 1 放入 window.log - Константин Ван
显示剩余2条评论

7
这是我之前回答的稍微简短/简单一些的版本。为了让事情更容易,我们将在每个日志上进行一个AJAX调用,并使用jQuery来完成“重活”。(如果您使用的是除jQuery之外的JS库,则应该有某种类似的方法;如果没有,或者如果您不使用JS库......那么是时候认真考虑jQuery了!)哦,我们还会添加一些服务器端伪代码,以演示方程式的这部分有多容易。
步骤1:添加一堆console.log语句,以帮助诊断您的问题
步骤2:添加逻辑以重新定义客户端系统上的console.log,以便在没有控制台的情况下将日志发送到您的服务器
var SERVER_URL = "www.yourServer.com/ajaxLogger.jsp";
var ajaxConsole = {"log":function(x) {
    $.get(SERVER_URL, {"log":x});
}}
console = console || ajaxConsole; // If there is no console, use the AJAX one

步骤三:在你的服务器上创建一个日志页面。
以下示例使用伪代码,因为每个人的服务器端语言都不同。
String log = pageParameters["log"];
Database.execute("INSERT INTO yourLogTable (log, date) VALUES ('" +
        dbEscape(log) +"', current date)");

1

有一个开源工具可以让你将所有console.log输出保存在服务器上的文件中 - JS LogFlush(插件!)。

JS LogFlush是一个集成的JavaScript日志记录解决方案,包括:

  • 客户端跨浏览器无UI替代console.log。
  • 服务器端日志存储系统。

演示


1
你可以使用我的 JavaScript 日志记录库 log4javascript。你需要:
  • 设置 log4javascript,使用 AjaxAppender 发送日志消息到服务器(请参见快速入门指南,接近底部)
  • 添加 JavaScript 日志记录调用
  • 使用你选择的技术收集服务器上的日志消息

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接