是否有可能为`goog.debug.Logger`(如`console.log`)获得更好的输出?

时间:2012-06-25 09:31:07

标签: javascript logging google-closure

google-closure库还包含logging system,大多数开发人员都应该熟悉它。这很好。不幸的是,你得到的输出效果不如使用某些浏览器/插件提供的console.log那样具有表现力。

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

因此,我仍然继续使用console.log。但是,如果运气不好,您忘记将其从生产代码中删除,那么您的代码将在没有console.log(f.ex。: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吗?

2 个答案:

答案 0 :(得分: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);
}

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

此致

答案 1 :(得分: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));