【问题标题】:What debug logging tools are available from Javascript? [closed]Javascript 提供了哪些调试日志记录工具? [关闭]
【发布时间】:2010-09-10 19:56:11
【问题描述】:

我想创建一个“通用”调试日志记录函数,用于检查知名日志库的 JS 命名空间。

例如目前支持Firebug的console.log:

var console = window['console'];
if (console && console.log) {
  console.log(message);
}

显然,这仅在安装/启用 Firebug 的情况下在 Firefox 中有效(它也可以在其他带有 Firebug Lite 的浏览器上工作)。基本上,我将提供一个 JS 库,我不知道它会被拉入什么环境,我想知道是否有办法向用户报告调试输出。

所以,也许 jQuery 提供了一些东西——我会检查 jQuery 是否存在并使用它。或者也许有一些我可以嗅探的知名 IE 插件。但它必须是一个相当完善和使用的机制。我无法检查人们创建的每一个晦涩的日志函数。

请,每个答案只有一个图书馆/技术,这样他们才能获得投票排名。此外,使用 alert() 是一个很好的短期解决方案,但如果您想要强大的调试日志记录或者如果阻止执行是一个问题,则会失败。

【问题讨论】:

    标签: javascript debugging logging cross-browser


    【解决方案1】:

    我个人使用 Firebug/Firebug Lite,在 IE 上让 Visual Studio 进行调试。但是,当访问者使用一些疯狂的浏览器时,这些都没有任何好处。您确实需要让您的客户端 javascript 将其错误记录到您的服务器。看看我在下面链接到的 power point 演示文稿。它有一些关于如何让你的 javascript 在你的服务器上记录东西的非常巧妙的想法。

    基本上,您将 window.onerror 和 try {} catch(){} 块与一个函数挂钩,该函数向您的服务器发出请求并提供有用的调试信息。

    我刚刚在自己的 Web 应用程序上实现了这样一个过程。我有每个 catch(){} 块调用一个函数,该函数将 JSON 编码的消息发送回服务器,而服务器又使用我现有的日志记录基础设施(在我的例子中是 log4perl)。我链接到的演示文稿还建议在您的 javascript 中加载图像,将错误包含在 GET 请求中。唯一的问题是如果你想包含堆栈跟踪(IE 根本不会为你生成),请求会太大。

    Tracking ClientSide Errors, by Eric Pascarello

    PS:我想补充一点,我认为使用 jQuery 之类的任何类型的库来进行“硬核”日志记录都不是一个好主意,因为您记录错误的原因可能是 jQuery或萤火虫精简版!也许错误是浏览器(咳嗽 IE6)执行了一些疯狂的加载命令并抛出某种空引用错误,因为它太愚蠢而无法正确加载库。

    在我的例子中,我确保我的所有 javascript 日志代码都在

    中,而不是作为 .js 文件拉入。这样,我可以合理地确定,无论浏览器抛出什么样的曲线球,我都能记录下来。

    【讨论】:

      【解决方案2】:

      你可以试试log4javascript

      披露:我写的。

      【讨论】:

        【解决方案3】:

        Firebug lite 是一个跨浏览器,精简版的 Firefbug,至少可以在大多数浏览器上为您提供 console.log 功能。

        【讨论】:

          【解决方案4】:

          MochiKit 具有以下功能(包括在此处与完整的命名空间解析):

          MochiKit.Logging.logDebug() // prefaces value with "DEBUG: "
          MochiKit.Logging.log() // prefaces value with "INFO: "
          MochiKit.Logging.logError() // prefaces value with "ERROR: "
          MochiKit.Logging.logFatal() // prefaces value with "FATAL: "
          MochiKit.Logging.logWarning() // prefaces value with "WARNING: "
          

          MochiKit.Logging 命名空间远不止这些,但这些都是基础知识。

          【讨论】:

            【解决方案5】:

            如果您已经在使用 jQuery,我可以衷心推荐 jQuery 调试插件(又名 jquery.debug.js)。见http://trainofthoughts.org/blog/2007/03/16/jquery-plugin-debug/

            此插件允许您通过全局开关关闭或打开调试日志。日志如下所示:

            $.log('My value is: ' + val);
            

            输出在 Firefox 下发送到 console.log,并写入到其他浏览器页面底部插入的 div 块中。

            【讨论】:

            • 我没有使用 jQuery - 如前所述,我正在创建一个库,该库可以加载到存在 jQuery 的页面中。如果发生这种情况,我想使用我可以依赖的 jQuery 功能......但是第三方插件是一个延伸......
            【解决方案6】:

            Firebug Lite(对于那些非 Firefox 浏览器)呢?除了在 IE 中调试 Dojo 代码时,我没有使用太多。但它尽最大努力在 IE、Safari 和 Opera 中放置 Firebug 控制台。

            当然,总是有可靠的“alert (err_msg);” :D

            【讨论】:

              【解决方案7】:

              JQuery Logging,看起来很有希望。

              【讨论】:

                【解决方案8】:

                我自己,我坚信以下几点:

                alert('Some message/variables');
                

                【讨论】:

                • 这是一个很好的临时解决方案,但如果您发出信息级日志记录(通常有很多),则会失败。由于所有的 alert()s,应用程序很快就会变得无法使用
                • 啊,我以为更多的是信息的短期输出
                • 即使你只是简单地“输出”信息,因为警报是一个阻塞调用,不幸的是,它可能会导致副作用,尤其是。与阿贾克斯。我的代码表现不佳仅仅是因为警报放置在错误的位置。
                • 我最大的个人问题之一是警报日志记录是它会阻塞,所以在用户点击 OK 之前不会运行其他脚本。如果您正在调试 Ajax 或其他类型的代码,这些代码可能会在您等待点击 OK 时收到响应,这可能会造成不利影响。
                猜你喜欢
                • 1970-01-01
                • 2023-04-10
                • 2010-10-23
                • 1970-01-01
                • 2016-01-18
                • 2017-11-11
                • 1970-01-01
                • 1970-01-01
                • 2010-12-05
                相关资源
                最近更新 更多