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

时间:2020-03-06 14:22:35  来源:igfitidea点击:

我想创建一个"通用"调试日志记录功能,该功能检查JS名称空间中的知名日志记录库。

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

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

显然,这仅在安装/启用Firebug的情况下才在Firefox中起作用(它也将在具有Firebug Lite的其他浏览器上起作用)。基本上,我将提供一个不知道将其放入哪个环境的JS库,并且我希望能够确定是否有向用户报告调试输出的方法。

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

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

解决方案

我本人坚信以下内容:

alert('Some message/variables');

Firebug lite是跨浏览器,是Firefbug的精简版,至少会为我们提供大多数浏览器的console.log功能。

那么Firebug Lite(对于那些非Firefox浏览器)又如何呢?除了在IE中调试Dojo代码外,我没有用过很多东西。但它会尽力将Firebug控制台放入IE,Safari和Opera中。

当然,总会有永远可靠的"警报(err_msg);"。 :D

有JQuery日志记录,看起来很有希望。

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

此插件使我们可以通过全局开关来关闭或者打开调试日志。日志记录如下:

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

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

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

基本上,我们会钩上window.onerror,并使用具有以下功能的try {} catch(){}块来向服务器发送请求,该函数会提供有用的调试信息。

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

跟踪客户端错误,作者:埃里克·帕斯卡雷洛(Eric Pascarello)

PS:我想补充一点,我认为使用任何类型的库(例如jQuery)进行"硬核"记录都不是一个好主意,因为记录错误的原因可能是jQuery或者Firebug Lite!可能的错误是浏览器(咳嗽IE6)执行了一些疯狂的加载命令,并抛出某种Null Reference错误,因为它太愚蠢而无法正确加载库。

在我的实例中,我确保我所有的JavaScript日志代码都在<head>中,而不是作为.js文件插入。这样,我可以合理地确定,无论浏览器抛出哪种曲线球,我都能记录下来。

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命名空间的功能远不止于此,但这是基础。

我们可以尝试使用log4javascript。

披露:我写的。