Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有可能为“goog.debug.Logger”(如“console.log”)获得更好的输出?_Javascript_Logging_Google Closure - Fatal编程技术网

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 user
console.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));