如何覆盖/拦截 console.log 并将原始日志输出到控制台
How to overwrite / intercept console.log and output original log to console
我正在尝试拦截 console.log 并将其写入数组以编程方式访问日志。这应该是跨浏览器兼容的。
window["log"]=[];
var logger = console.log;
console.log = function() {
window["log"].push({arguments});
// neither seems to output as original
logger( arguments );
logger.call ( arguments );
logger.call ( console, arguments );
logger.apply ( arguments );
}
我的问题是 logger( arguments)
总是将一个数组写入控制台而不是原始消息。如何让控制台输出带有原始行号和文件的原始消息?
您正在寻找:
logger.apply(console, arguments);
...调用原始函数,将 this
设置为 console
并将 arguments
作为离散参数展开。
旁注:如果您想广泛兼容,则需要在此处替换 ES2015+ 代码:
window["log"].push({arguments});
与 ES5 兼容的代码:
window["log"].push({arguments: arguments});
我正在尝试拦截 console.log 并将其写入数组以编程方式访问日志。这应该是跨浏览器兼容的。
window["log"]=[];
var logger = console.log;
console.log = function() {
window["log"].push({arguments});
// neither seems to output as original
logger( arguments );
logger.call ( arguments );
logger.call ( console, arguments );
logger.apply ( arguments );
}
我的问题是 logger( arguments)
总是将一个数组写入控制台而不是原始消息。如何让控制台输出带有原始行号和文件的原始消息?
您正在寻找:
logger.apply(console, arguments);
...调用原始函数,将 this
设置为 console
并将 arguments
作为离散参数展开。
旁注:如果您想广泛兼容,则需要在此处替换 ES2015+ 代码:
window["log"].push({arguments});
与 ES5 兼容的代码:
window["log"].push({arguments: arguments});