Javascript 是否有可能为“goog.debug.Logger”(如“console.log”)获得更好的输出?
该库还包含大多数开发人员都应该熟悉的。这很好。不幸的是,您从中获得的输出没有使用某些浏览器/插件提供的Javascript 是否有可能为“goog.debug.Logger”(如“console.log”)获得更好的输出?,javascript,logging,google-closure,Javascript,Logging,Google Closure,该库还包含大多数开发人员都应该熟悉的。这很好。不幸的是,您从中获得的输出没有使用某些浏览器/插件提供的console.log时那么有表现力 例如,如果您在Chrome中编写console.log(window),控制台将显示一个可以交互检查的对象。当使用google closure logger时,它不会这样做。我假设它将在内部简单地将对象的字符串表示形式传递给console.log。所以你失去了很多便利 因此,我仍然继续使用console.log。但是,如果运气不好,您忘记将其从生产代码中删除
console.log
时那么有表现力
例如,如果您在Chrome中编写console.log(window)
,控制台将显示一个可以交互检查的对象。当使用google closure logger时,它不会这样做。我假设它将在内部简单地将对象的字符串表示形式传递给console.log
。所以你失去了很多便利
因此,我仍然继续使用console.log
。但是,如果运气不好,您忘记将其从生产代码中删除,您的代码将在没有console.log
(例如:IE)的浏览器中中断
或者,可以通过首先检查是否存在来防止这种情况,例如:
window.console && window.console.log && console.log(...)
或:
但这两种解决方案都远远不够完美。而且,考虑到该库有一个日志框架,能够使用它会很好。现在,我发现console.log
有时更有用
因此,我的问题(tl/dr):当我编写
myLogger.info(x)
时,是否可以使用google closure userconsole.log(x)
,而不是使用x
的字符串表示?您也可以使用goog.debug.FancyWindow来拥有一个单独的窗口来显示日志。有关更多信息,请参阅谷歌闭包演示页面:并查看源代码
如果您只是使用控制台日志记录,另一个优点是框架将自动在模块名称和时间之前加上前缀。。。只需添加以下行即可使用控制台日志:
goog.require('goog.debug.Console');
if (goog.DEBUG) {
debugConsole = new goog.debug.Console;
debugConsole.setCapturing(true);
}
这也将阻止在生产代码中显示控制台日志记录
问候,
雷内
Google Closure可以根据您的需要提供信息。有功能,没有对象的功能。请参阅下面的代码片段
我要寻找的关键点是
goog.debug.expose
。当我第一次查看日志框架的文档时,我没有注意到这一点!虽然不像交互式控制台.log
转储那样方便,但这在大多数情况下都可以。谢谢!恐怕这个答案中的代码会导致错误。由于导入goog.debug.Console后立即使用goog.require…
goog.debug.expose
非常有用。仍然不如从console.log
获得的输出有用。
goog.require('goog.debug.Console');
if (goog.DEBUG) {
debugConsole = new goog.debug.Console;
debugConsole.setCapturing(true);
}
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));