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

exh*_*uma 5 javascript logging google-closure

谷歌,封库还包含一个记录系统,这应该是最熟悉的开发者.这很好.不幸的是,你得到的输出不如使用console.log某些浏览器/插件提供的那样具有表现力.

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

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

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

window.console && window.console.log && console.log(...)
Run Code Online (Sandbox Code Playgroud)

要么:

if (DEBUG) {
    console.log(...)
}
Run Code Online (Sandbox Code Playgroud)

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

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

小智 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);
}
Run Code Online (Sandbox Code Playgroud)

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

问候,

刘若英