捕获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) {...}, //... }