有什么方法可以收集 Beta 测试人员的控制台日志?

Any way to collect beta testers' console logs?

我计划启动我正在开发的网络应用程序的封闭测试版,并且我想要一种方法来轻松地从测试人员那里收集控制台日志数据。 "easily" 我的意思是对他们来说很容易,因为他们中的大多数人的技术水平不足以打开控制台和 copy/paste 信息和错误。有什么方法可以收集这些信息,包括所有 log/info/warn/error 语句和堆栈跟踪?

编辑:我应该澄清一下,我担心的主要是未处理的异常,因此重写 console.error 不会执行任何操作,因为该函数未被调用。

研究一个支持记录到数据库的日志记录库,或者制作一些记录功能,这些功能将在 log/info/warn/error 出现时执行 ajax post。使 post 包含简单的信息,例如时间戳、用户和控制台输出。在后端让它记录所有信息。这对用户来说是最简单的方法。

更新

您已编辑您的问题,说明您想要记录错误,因此,您必须使用 window 对象中可用的 onerror 事件。

window.addEventListener('error', function(e) {
  // log whatever you want here
});

您可以在 Javascript:

中做类似的事情
console.print = console.log;
console.log = function() {
  console.print(arguments);

  // collect your data here, for example, sending a XHR
  var params = "values=" + encodeURIComponent(JSON.stringify(arguments));
  var xhr = new XMLHttpRequest();
  xhr.open('POST', '/log-data');
  xhr.send(params);
}

您覆盖 console.log 功能,您可以在那里做任何您想做的事。

不久前,我偶然发现了一个针对学生的网络应用程序的相同问题。

请看一下我在"Get console history"的回答:

基本上,我编写了一个简单的库来捕获所有 console[log/info/warn/err/debug] 调用并将它们作为数组存储在 console.history 中。

库可在 GitHub 上找到,还有更多示例和文档:https://git.io/console

因此,使用 console.history,您可以 - 使用 @Buzinas 的回答 - 轻松 POST 完整的控制台历史记录到您的服务器或存储解决方案:

window.addEventListener('error', function(e) {

  // POST request to server
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.open("POST", "/log-data");
  xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
  xmlhttp.send(JSON.stringify(console.history));

});

有人告诉我一个非常酷的错误记录服务,叫做 Rollbar,它实际上会自动记录未处理的异常。我现在正在使用它,它帮了我很大的忙!