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

Javascript提供了哪些调试日志记录工具?,javascript,debugging,logging,cross-browser,Javascript,Debugging,Logging,Cross Browser,我想创建一个“通用”调试日志函数,用于检查JS命名空间中的著名日志库 例如,目前它支持Firebug的console.log: var console = window['console']; if (console && console.log) { console.log(message); } 显然,只有在Firefox中安装/启用Firebug时,这一功能才有效(在其他浏览器上也可以使用Firebug)。基本上,我将提供一个JS库,我不知道它将被拉入什么环境,我想知

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

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

var console = window['console'];
if (console && console.log) {
  console.log(message);
}
显然,只有在Firefox中安装/启用Firebug时,这一功能才有效(在其他浏览器上也可以使用Firebug)。基本上,我将提供一个JS库,我不知道它将被拉入什么环境,我想知道是否有一种方法可以向用户报告调试输出

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


请,每个答案只有一个库/技术,这样他们就可以获得投票排名。此外,使用alert()是一个很好的短期解决方案,但如果您想要健壮的调试日志记录,或者如果阻塞执行是一个问题,则会出现故障。

我本人坚信以下几点:

alert('Some message/variables');
是Firefbug的一个跨浏览器、精简版,至少在大多数浏览器上都能为您提供console.log功能。

那(对于那些非Firefox浏览器)呢?除了在IE中调试Dojo代码外,我很少使用它。但它尽可能在IE、Safari和Opera中安装Firebug控制台


当然,总是有可靠的“警报(err_msg);”:如果您已经在使用jQuery,我可以衷心推荐jQuery调试插件(也称jQuery.Debug.js)。看

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

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

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

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

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

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

PS:我想补充一点,我认为使用像jQuery这样的库进行“硬核”日志记录不是一个好主意,因为您记录错误的原因可能是jQuery或Firebug Lite!可能错误在于浏览器(IE6)执行了一些疯狂的加载顺序,并抛出了某种空引用错误,因为它太愚蠢了,无法正确加载库

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

具有以下功能(包括完整的名称空间解析):

名称空间的内容远不止这些,但这些都是基础。

您可以试试


披露:这是我写的。

这是一个很好的临时解决方案,但如果您发出信息级日志记录,则会失败,通常会有很多日志记录。这个应用程序很快就会变得不可用,因为所有的alert()sAhh,我认为它更多的是关于信息的短期输出,即使你只是简单地“输出”信息,因为alert是一个阻塞调用,不幸的是,它会导致副作用,特别是在Ajax中。我的代码表现不佳仅仅是因为警报放在了错误的位置。我个人最大的警报日志问题之一是它会阻塞,因此在用户点击OK之前,不会运行其他脚本。如果您正在调试Ajax或其他类型代码,而这些代码在等待点击OK时可能会收到响应,那么这可能会造成损害。我没有使用jQuery,正如前面所述,我正在创建一个库,它可能会加载到jQuery所在的页面中。如果发生这种情况,我想使用我可以依赖的jQuery特性。。。但是第三方插件是一种延伸。。。
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: "