可能重复:
在 Chrome 中拦截对 console.log 的调用
我可以在 javascript 中扩展控制台对象(用于重新路由日志记录)吗?
当我的 JS 应用程序写入时console.log
,我想捕获该日志消息,以便我可以将该日志输出 AJAX 到服务器。我怎么做?
写入日志的代码来自外部服务,这就是为什么我不能直接 ajax 它。
可能重复:
在 Chrome 中拦截对 console.log 的调用
我可以在 javascript 中扩展控制台对象(用于重新路由日志记录)吗?
当我的 JS 应用程序写入时console.log
,我想捕获该日志消息,以便我可以将该日志输出 AJAX 到服务器。我怎么做?
写入日志的代码来自外部服务,这就是为什么我不能直接 ajax 它。
您可以通过以下方式劫持 JavaScript 函数:
(function(){
var oldLog = console.log;
console.log = function (message) {
// DO MESSAGE HERE.
oldLog.apply(console, arguments);
};
})();
oldLog
(出于可维护性原因)。message
到服务器的位置。apply
被使用,因此我们可以使用原始参数调用它。 console
简单地调用oldLog(message)
会失败,因为log
取决于它与console
.
更新Per zzzzBov 下面的评论,在 IE9console.log
中实际上不是一个函数,所以oldLog.apply
会失败。有关更多详细信息,请参阅console.log.apply not working in 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) {...},
//...
}