Javascript自定义日志记录实用程序会干扰chrome检查器行为

时间:2013-09-01 09:13:26

标签: javascript

我正在通过覆盖默认的console.log来编写我自己的日志记录实用程序,如下所示

console.logCopy = console.log.bind(console);
console.log = function() {
    this.logCopy.apply(console, addStampToArgs(arguments));
};

我正在使用chrome的检查器进行调试。

我的方法工作正常,除了一个问题,现在我无法使用chrome检查器功能,它为每个日志行显示<file>:<line-number>并带有代码链接。

现在它显示了源自我的console.log包装函数的每个日志行。

如何让我的包装函数不被控制台跟踪,以便我得到正确的<file>:<line-number>

1 个答案:

答案 0 :(得分:0)

我想问题是控制台日志记录工具是副作用的,因此不适合作文。

他们都返回undefined

控制台

console.log("me")
me
<- undefined
console.warn("me")
me
<- undefined
console.error("me")
me
<- undefined
console.trace()
console.trace()
(anonymous function)
InjectedScript._evaluateOn
InjectedScript._evaluateAndWrap
InjectedScript.evaluate
<- undefined

我也会对Javascript自定义日志记录感兴趣,以便访问类似于printf的漂亮格式化功能,例如: %o,%O,%d,%s,%c,......

控制台

console.log("%o", [[{}, 1, "two"]]);
[Array[3]]
0: Array[3]
0: Object
1: 1
2: "two"
length: 3
__proto__: Array[0]
length: 1
__proto__: Array[0]
<- undefined

他们也可以处理循环引用,这很难用JSON.stringify来实现。

我在谷歌Chrome(金丝雀)源片段中玩这个。

在那里我注意到它通过一个新的代码段方案记录堆栈跟踪信息,但链接只是打开一个空的选项卡,无法访问那里的devtools。

try {
    console.trace();
    console.log("hi");
    FIXME
} catch (exception) {
    console.log(exception.stack);
}

控制台

console.trace() consolation.js:2
(anonymous function) consolation.js:2
hi consolation.js:3
ReferenceError: FIXME is not defined
    at snippets:///14_224:4:5 consolation.js:6
undefined

但是,唉,至于你的问题,我没有答案。

将此作为评论写下来并不会很好。

相关问题