1

我正在通过覆盖默认 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>

4

1 回答 1

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.

我在 Google Chrome (canary) Source Snippets 中玩这个。

在那里我注意到它通过一个新的代码片段方案记录堆栈跟踪信息,但该链接只是打开一个空选项卡,无法访问那里的 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

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

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

于 2013-09-01T11:58:41.747 回答