9

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

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

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

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

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

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

4

8 回答 8

7

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

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

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

跟踪客户端错误,作者 Eric Pascarello

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

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

于 2008-09-18T18:07:42.590 回答
7

你可以试试log4javascript

披露:我写的。

于 2009-06-01T16:00:33.177 回答
4

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

于 2008-09-18T17:55:45.253 回答
3

MochiKit has the following functions (included here with full namespace resolution):

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: "

There is a lot more to the MochiKit.Logging namespace than this, but these are the basics.

于 2008-09-18T18:47:14.850 回答
1

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

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

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

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

于 2008-09-18T17:58:26.357 回答
0

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

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

于 2008-09-18T17:56:19.480 回答
0

JQuery Logging,看起来很有希望。

于 2008-09-18T17:56:21.383 回答
-1

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

alert('Some message/variables');
于 2008-09-18T17:54:05.337 回答