使用Firefox将JavaScript控制台记录到日志文件中

时间:2013-10-10 14:22:17

标签: javascript firefox logging

我们有一个在kiosk模式Firefox中运行的Web应用程序,使用RKiosk扩展来实现这一目标。我们怀疑系统中存在非常罕见的错误,导致JavaScript错误。但是因为我们无法访问JavaScript控制台,所以我们无法检查日志。

我正在搜索一个选项,让Firefox将所有JavaScript控制台消息记录到文件中,而不管打开的选项卡和页面如何。我似乎无法找到任何扩展。我已经在使用log4javascript将错误发送回服务器,但似乎我们的应用程序崩溃的方式是它完全跳过了日志记录。

7 个答案:

答案 0 :(得分:3)

写一个文件对我来说听起来像是一项繁琐的工作。它需要浏览器代码通常不具有的权限,并且您必须与您必须编写的加载项进行协商才能访问file I/O

据我所知,你的问题是

  

我想让Firefox记录所有错误

有几种方法可以解决这个问题

第一种方法 - 将所有内容记录到localStorage:

现在,您可以写信到localStorageIndexedDB,而不是写入实际文件。

localStorage["myApplog"] = localStorage["myApplog"] || "";
var oldLog = console.log;
console.log = function(){
    oldLog.apply(console,arguments); // use the old console log
    var message =  "\n "+(new Date).toISOString() + " :: "+
                   Array.prototype.join.call(arguments," , "); // the arguments
    localStorage["myApplog"] += message; 
}

这是相当脏的而且相当慢,但它应该完成工作,您可以稍后在本地存储中访问日志。如果我没记错的话,LocalStorage有一个约5MB的限制,如果你不熟悉日志,我觉得这已经足够了。您也可以选择性地运行它。

第二种方法 - 仅记录错误

这与Pumbaa80建议的类似。您只需覆盖window.onerror并仅记录错误。

// put an empty string in loggedWinErrors first
var oldError = window.onerror || function(){};
window.onerror = function(err,url,lineNumber){
   oldError.call(this,err,url,lineNumber);
   var err ="\n Error: (file: " + url+", error: "+err+", lineNumber: "+lineNumber+")"); 
   localStorage["loggedWinErrors"] += err;
}

第三种方法 - 使用虚拟机。

这是功能最强大的版本,但它提供了最有问题的用户体验。您在虚拟机中运行自助服务终端,检测到未捕获的异常 - 当您冻结计算机并保存其状态时,请改为运行备份VM。在处理最可怕的错误时,我只需要这样做,而且不是很好。除非你真的想要整个捕获状态 - 不要这样做。

真的,在此之前做扩展 - 这很乏味但结果非常可靠。


总之,我认为第一种方法甚至只是第二种方法足以满足您的需求。 localStorage是一个抽象的存储,网页可以在没有安全问题的情况下保存状态。如果这还不够大,我们可以谈谈IndexedDB解决方案。

这一切都取决于你的用例。

答案 1 :(得分:3)

您可以使用 XULRunner ... XUL应用程序的Mozilla运行时环境。它使用Gecko之类的Firefox和:

  1. 您可以访问文件系统或使用SQLite数据库存储日志。
  2. 您可以在不使用扩展程序的情况下以全屏模式呈现自助服务终端。

答案 2 :(得分:1)

你考虑过远程登录吗?

我通常会指定window.onerror向远程存储错误详细信息的网络服务器发送请求。如果您愿意,可以使用console.log执行相同操作。

答案 3 :(得分:1)

你试过jserrorcollector吗?我们正在使用它,它工作正常(仅在Firefox中)。它仅适用于Java。

// Initialize
FirefoxProfile ffProfile = null;
ffProfile = new FirefoxProfile();
JavaScriptError.addExtension(ffProfile);

 // Get the errors
List<JavaScriptError> jsErrors = JavaScriptError.readErrors(webDriver);

更多信息:https://github.com/mguillem/JSErrorCollector

答案 4 :(得分:1)

尝试以下控制台导出。它是Firebug Firefox的插件。这很方便。

http://www.softwareishard.com/blog/consoleexport/

答案 5 :(得分:0)

如果您能够/愿意从Firefox切换到Chrome或Opera,您将能够使用Sandboxed Filesystem API编写本地文件。参见:

使用chrome.exe --kiosk <url>

以自助服务终端模式开始

然后,您需要禁用Alt-F4和Ctrl-Alt-Del,在Windows上可以使用多个第三方工具(例如Auto HotkeyDisable Ctrl-Alt-Del Script)来完成。

答案 6 :(得分:0)

您可以使用Qbaka之类的远程日志记录脚本。它捕获每个JS错误并将其发送到Qbaka服务器。在那里,您可以登录并查看所有JS错误。 Qbaka为每条错误消息存储确切的错误消息,脚本,行号,堆栈跟踪和使用过的浏览器。