捕获javascript console.log?

可能重复:
拦截在Chrome中调用console.log
我可以在JavaScript中扩展控制台对象(用于重新路由logging)吗?

当我的JS应用程序写入console.log时,我想捕获该日志消息,以便我可以将AJAXlogging输出到服务器。 我怎么做?

写入日志的代码来自外部服务,这就是为什么我不能直接对其进行Ajax的原因。

您可以通过以下方式劫持JavaScript函数:

(function(){ var oldLog = console.log; console.log = function (message) { // DO MESSAGE HERE. oldLog.apply(console, arguments); }; })(); 
  1. 第1 oldLog函数封装在闭包中,所以没有其他函数可以直接访问oldLog (出于可维护性的原因)。
  2. 第2行捕获原始方法。
  3. 第3行创build一个新的function。
  4. 第4行是你发送message到你的服务器的地方。
  5. 第5行调用最初处理的原始方法。

apply被使用,所以我们可以使用原始参数 console 调用它。 简单地调用oldLog(message)将失败,因为log取决于它与console关联。


更新每个zzzzBov的评论下面,在IE9 console.log实际上不是一个函数,所以oldLog.apply会失败。 请参阅console.log.apply在IE9中不工作的更多细节。

简单:

 function yourCustomLog(msg) { //send msg via AJAX } window.console.log = yourCustomLog; 

您可能需要覆盖整个console对象来捕获console.infoconsole.warn等:

 window.console = { log = function(msg) {...}, info = function(msg) {...}, warn = function(msg) {...}, //... }