JavaScript console.log / trace等的策略

时间:2010-06-19 08:08:57

标签: javascript debugging exception logging

我正在编写一个相当大的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似乎是有点未完成。

3 个答案:

答案 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语句。