Javascript提供哪些调试日志工具?

时间:2008-09-18 17:52:48

标签: javascript debugging logging cross-browser

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

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

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

显然,这只适用于Firefox,如果安装/启用了Firebug(它也适用于Firebug Lite的其他浏览器)。基本上,我将提供一个JS库,我不知道它将被引入什么环境,我希望能够弄清楚是否有办法向用户报告调试输出。

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

请注意,每个答案只有一个图书馆/技术,所以他们可以获得投票排名。此外,使用alert()是一个很好的短期解决方案,但如果您需要强大的调试日志记录或阻止执行是一个问题,则会出现故障。

8 个答案:

答案 0 :(得分:7)

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

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

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

Tracking ClientSide Errors, by Eric Pascarello

PS:我想补充一点,我不认为使用任何类型的库(如jQuery)进行“硬核”日志记录是个好主意,因为可能是您记录的错误的原因是 jQuery或Firebug Lite!也许错误是浏览器( cough IE6)做了一些疯狂的加载顺序并且抛出了某种Null Reference错误,因为加载库是非常愚蠢的。

在我的实例中,我确保所有的javascript日志代码都在< head>中。而不是作为.js文件拉入。通过这种方式,我可以合理地确定无论浏览器抛出什么样的曲线球,我都能记录它的好坏。

答案 1 :(得分:7)

您可以尝试log4javascript

披露:我写了它。

答案 2 :(得分:4)

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

答案 3 :(得分:3)

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命名空间还有很多,但这些是基础知识。

答案 4 :(得分:1)

如果您已经在使用jQuery,我可以衷心地推荐jQuery Debug插件(a.k.a.,jquery.debug.js)。请参阅 http://trainofthoughts.org/blog/2007/03/16/jquery-plugin-debug/

此插件允许您通过全局开关关闭或打开调试日志记录。记录看起来像这样:

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

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

答案 5 :(得分:0)

Firebug Lite(对于那些非Firefox浏览器)怎么样?除了在IE中调试Dojo代码时,我没有太多使用它。但它尽可能地将一个Firebug控制台放在IE,Safari和Opera中。

当然总有可靠的'警报(err_msg);' :d

答案 6 :(得分:0)

JQuery Logging,看起来很有希望。

答案 7 :(得分:-1)

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

alert('Some message/variables');