我正在编写一个相当大的JavaScript软件。我需要跟踪调用,记录事件,调试操作,同时保持跨浏览器的性能和可移植性。
Webkit和Firebug都提供了控制台对象,其中包括trace(),log(),error(),warning()等等。它们很棒,但是当浏览器是IE或Opera时我该怎么办?
想象一下,拥有一个大型应用程序,你肯定希望看到它正在进行的所有初始化,它正在制作的事件等,因此我将它记录下来。但是,如果我只记录这些日志,则日志记录将无法在DOM中注册 console 的浏览器中运行。我可以创建一个包装器对象:
MyNamespace.Console = {};
MyNamespace.Console.log = function(value) {
if (console!==undefined) {
console.log(value);
}
else {
// What should I do to log events on other browsers?
}
}
以上说明在IE / Opera上没有问题,但我如何使用IE登录(一个人真的需要用IE登录!)。
另外,如果我在我的应用程序中随处可见日志,那么当它在生产环境中运行时,它会减慢我的速度吗?如果DEBUG === true,我是否应该在开启/关闭开关DEBUG并进行简单检查,然后记录?
像Closure Compiler这样的系统,你可以让他们删除日志记录吗?
如果在生产环境中运行时出现错误并且没有发生日志记录,如何调试/查找问题该怎么办?事实上,您是否曾向您(开发人员)发送JavaScript错误日志,以确保您的客户没有问题?这是怎么回事?
我很感激有关使用JavaScript调试/记录的任何反馈/意见,这是我第一次编写一个巨大的JavaScript应用程序,坦率地说,我不知道该怎么做才能...调试和登录JavaScript似乎是有点未完成。
答案 0 :(得分:4)
我不建议将应用程序报告日志数据发回给开发人员 - 至少在没有向用户/客户首先公开的情况下是这样。
如Anurag建议的那样,最初将错误/事件/调试数据记录到数组是一种更安全的做法,然后定期将日志数据发送到Web服务器,在那里它可以存储在本地并循环。然后如果客户端出现问题,他们可以自己提取日志以进行调试,或者手动将其发送给您,或者明确告诉应用程序将日志传输给您,即开发人员。 / p>
通常在开发过程中使用记录到控制台。并且应该使用调试标志,以便它不会一直打开。
答案 1 :(得分:3)
您只需将所有日志消息添加到数组或对象即可。对象可能如下所示:
var logMessages = {
'log': [],
'debug': [],
'error': [],
...
};
其中数组表示为该级别记录的消息,按时间顺序排序或使用其他一些标准。
您可以简单地为缺少console
的浏览器定义相同的界面。例如,
if(!window.console) {
var console = {};
console.log = function(msg) {
..
};
console.debug = function(msg) {
..
};
..
}
消息列表可以与服务器同步,我猜这可能只是错误和警告的必要条件。要捕获页面上的所有错误,请在window
上设置回调:
window.onerror = function() {
..
};
并在回调内部向服务器报告。这可能不适合Opera。见javascript-global-error-handling
答案 2 :(得分:3)
谷歌搜索协议redbird控制台。
Redbird允许使用纯JavaScript直接从任何符合标准的浏览器进行远程日志记录。它不会影响您的Web服务,它应该适用于Safari,Firefox,Chrome,Opera,MSIE,智能手机等。
Redbird在调试代码方面非常有用,它可以在一个浏览器中正常运行,但在另一个浏览器中执行不同的操作。在不同浏览器上记录和聚合消息的常用方法有助于识别差异。
如您所建议使用DEBUG标志是个好主意。大量调试消息可能会降低生产环境中的速度。生产环境的另一个选择是使用null函数替换日志记录函数,即不执行任何操作的函数。这样可以避免在代码中包含大量if DEBUG语句。