重新定义window.console函数时,保留原始路径位置

时间:2015-11-17 06:11:23

标签: javascript console instrumentation

我想记录所有控制台消息,所以我重新定义了控制台功能,包括log / warn / info / error,如下例所示

var originalError = console.error;    
console.error = function () {
     //Do something for logging
     originalError.apply(console, arguments);
};

但是,我丢失了实际调用console.error()的原始位置:path:line,因为它现在指向上面代码中的apply()函数。我怎样才能获得这些信息?

1 个答案:

答案 0 :(得分:2)

你做不到。但是,您可以通过在自定义函数中获取错误的.stack属性来模拟它,并将其预先/附加到错误或单独记录。

(new Error).stack给出了类似的内容:

"Error
    at <anonymous>:2:5
    at Object.InjectedScript._evaluateOn (<anonymous>:875:140)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:808:34)
    at Object.InjectedScript.evaluate (<anonymous>:664:21)"

对于非错误,请使用Stacktrace.js并获取arguments.callee的堆栈跟踪:

https://github.com/stacktracejs/stacktrace.js#generate-a-stacktrace-from-walking-argumentscallee