2

我有时喜欢将对象转储到控制台,以便我可以单击它并检查它。例如:

console.log(document.body);

在更近的地方,日志似乎将所有内容记录到每个组下的控制台(错误、警告、信息......)。但不转储对象。相反,格式化程序首先将其转换为字符串,然后再显示。

使用 goog.debug.expose 会有所帮助,但可能会创建大量文本,而不是像 FireBug/Chrome 那样用于检查的整洁的可点击行。

为了解决这个问题,我在 goog/debug/logger.js 中注释掉了一些代码

// goog.global['console']['timeStamp'](msg);
...
// goog.global['console']['markTimeline'](msg);

当我登录时,我使用 google.debug.Logger 来获取短消息,并编写了一个将对象转储到控制台的函数。这是一个例子:(一些变量是全局的,所以我可以在 FireBug 中使用它)

goog.require('goog.debug');
goog.require('goog.debug.DivConsole');
goog.require('goog.debug.Logger');
var con;
var l;
// dump object to firebug or chrome console for clickable inspection
var dumpToConsole=function(o){
    try{
        goog.global['console']['log'](o);
    }catch(e){
        l.warn("Cannot dump object to console."+
             goog.debug.deepExpose(o, true));
    }
}
var demoDebug = function() {
    var el=document.createElement("div");
    el.style.maxHeight="50px";
    el.style.overflow="auto";
    document.body.appendChild(el);
    con=new goog.debug.DivConsole(el);
    con.setCapturing(true);
    l = goog.debug.Logger.getLogger('myApp.translate');
    l.info("info");
    l.log("log");
    //dump object to console:
    dumpToConsole(document.body);
}
...
//in another script block later in the page:
demoDebug();

我的问题是:

这是进行日志记录的好方法吗?

计划将所有日志记录代码放在if (goog.DEBUG) {块中,以便在部署应用程序时不会编译它。

4

0 回答 0