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
吗?
答案 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));