我想创建一个“通用”调试日志记录功能,用于检查众所周知的日志记录库的JS命名空间。
例如,目前它支持Firebug的console.log:
var console = window['console'];
if (console && console.log) {
console.log(message);
}
显然,这只适用于Firefox,如果安装/启用了Firebug(它也适用于Firebug Lite的其他浏览器)。基本上,我将提供一个JS库,我不知道它将被引入什么环境,我希望能够弄清楚是否有办法向用户报告调试输出。
所以,也许jQuery提供了一些东西 - 我会检查jQuery是否存在并使用它。或者也许有着名的IE插件可以工作,我可以嗅探。但它必须是一个相当完善和使用的机制。我无法检查人们创建的每个模糊的日志功能。
请注意,每个答案只有一个图书馆/技术,所以他们可以获得投票排名。此外,使用alert()是一个很好的短期解决方案,但如果您需要强大的调试日志记录或阻止执行是一个问题,则会出现故障。
答案 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');