5

google-closure库还包含一个大多数开发人员应该熟悉的日志系统。这很好。不幸的是,您从中获得的输出不像console.log某些浏览器/插件提供的那样具有表现力。

例如,如果您console.log(window)在 Chrome 中编写,控制台将显示一个您可以交互检查的对象。使用 google-closure 记录器时,它不会那样做。我假设它会在内部简单地将对象的字符串表示形式传递给console.log. 所以你失去了很多便利。

正因为如此,我仍然继续使用console.log. 但是,如果运气不好,您忘记将其从生产代码中删除,您的代码将在没有的浏览器中中断console.log(例如:IE)。

或者,可以通过首先检查是否存在来防止这种情况,例如:

window.console && window.console.log && console.log(...)

或者:

if (DEBUG) {
    console.log(...)
}

但这两种解决方案都远非完美。而且,鉴于该库一个日志框架,能够使用它会很好。就像现在一样,我发现console.log有时更有用。

所以我的问题(tl/dr):console.log(x)当我写myLogger.info(x)而不是使用字符串表示时,我可以让 google-closure 用户x吗?

4

2 回答 2

5

您还可以使用 goog.debug.FancyWindow 来拥有一个单独的窗口来显示日志记录。有关更多信息,请参阅 google 关闭演示页面:https ://github.com/google/closure-library/blob/master/closure/goog/demos/debug.html并查看源代码。

如果您仅使用控制台日志记录,另一个优点是框架将自动添加模块名称和时间......只需添加以下行以使用控制台日志记录:

goog.require('goog.debug.Console');

if (goog.DEBUG) {
    debugConsole = new goog.debug.Console;
    debugConsole.setCapturing(true);
}

这也将阻止在生产代码中显示控制台日志记录。

问候,

雷内

于 2012-06-25T11:54:49.283 回答
2

Google Closure 可以根据您的需要提供信息。有功能,没有对象的功能。参考下面的代码片段。

 goog.require('goog.debug');
 goog.require('goog.debug.Logger');

 var theLogger = goog.debug.Logger.getLogger('demo');
 theLogger.info('Logging examples');

 // Create a simple object.
 var someone = {
     'name': 'peder',
         'age': 33,
         'gender': 'm',
         'kids': ['hari', 'sam', 'sneha']
 };

 // Show the object, note that it will output '[object Object]'.
 theLogger.info(someone);

 // Use expose to walk through the object and show all data.
 theLogger.info('Person: ' + goog.debug.expose(someone));


 // Does not show the functions by default.
 theLogger.info('expose (no functions): ' + goog.debug.expose(yourObject));


 // Shows the functions as well.
 theLogger.info('expose (w/functions): ' + goog.debug.expose(yourObject, true));

 // Show deepExpose, which walks recursively through data.
 theLogger.info('deepExpose (no functions): ' + goog.debug.deepExpose(yourObject));

 theLogger.info('deepExpose (w/functions): ' + goog.debug.deepExpose(yourObject, true));
于 2013-12-31T07:14:30.507 回答