捕获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
oldLog函数封装在闭包中,所以没有其他函数可以直接访问oldLog(出于可维护性的原因)。 - 第2行捕获原始方法。
- 第3行创build一个新的function。
- 第4行是你发送
message到你的服务器的地方。 - 第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.info , console.warn等:
window.console = { log = function(msg) {...}, info = function(msg) {...}, warn = function(msg) {...}, //... }