繁体   English   中英

JavaScript console.log / trace等的策略

[英]Strategies to JavaScript console.log/trace, etc

我正在写一个相当大的JavaScript软件。 我需要跟踪调用,记录事件,调试操作,同时保持跨浏览器的性能和可移植性。

Webkit和Firebug都提供了控制台对象,其中包括trace(),log(),error(),warning()等等。它们很棒,但是当浏览器是IE或Opera时我该怎么办?

想象一下,拥有一个大型应用程序,你肯定希望看到它正在进行的所有初始化,它正在制作的事件等等,因此我将它记录下来。 但是,如果我只是记录这些日志,则日志记录将无法在没有在DOM中注册的控制台的浏览器中运行。 我可以创建一个包装器对象:

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似乎有点未完成。

我不建议将应用程序报告日志数据反馈给开发人员 - 至少在没有向用户/客户首先公开的情况下。

如Anurag建议的那样,最初将错误/事件/调试数据记录到数组是一种更安全的做法,然后定期将日志数据发送到Web服务器,在那里它可以存储在本地并循环。 然后, 如果客户端遇到问题 ,他们可以自己提取日志以进行调试,或者手动将其发送给您,或者明确告诉应用程序将日志传输给开发人员。

无论如何,通常在开发期间使用登录到控制台。 并且应该使用调试标志,以便它不会一直打开。

您只需将所有日志消息添加到数组或对象即可。 对象可能如下所示:

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

做谷歌搜索协议redbird控制台。

Redbird允许使用纯JavaScript直接从任何符合标准的浏览器进行远程日志记录。 它不会影响您的Web服务,它应该适用于Safari,Firefox,Chrome,Opera,MSIE,智能手机等。

Redbird可以很方便地调试在一个浏览器中工作正常的代码,但在另一个浏览器中执行不同的操作。 跨不同浏览器记录和聚合消息的常用方法有助于识别差异。

如您所建议使用DEBUG标志是个好主意。 大量调试消息可能会降低生产环境中的速度。 生产环境的另一个选择是使用null函数替换日志记录函数,即不执行任何操作的函数。 这避免了代码中有大量的if DEBUG语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM