如何覆盖/拦截 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});