我一直在谷歌和各种JavaScript网站上搜索,但我还没有找到答案。有没有办法可以使用JavaScript / JQuery来监控console.log()?
例如,我想在单独的,麻烦的处理脚本调用console.log('foo');
时触发,当使用任何带有JavaScript控制台的Web检查器时,它很容易当脚本记录时会弹出foo
,但有没有办法可以用不同的脚本挂钩该事件?
答案 0 :(得分:4)
从Can I extend the console object (for rerouting the logging) in javascript?借来的代码:
(function() {
var exLog = console.log;
console.log = function(msg) {
exLog.apply(console, arguments);
alert(msg);
}
})()
只要在执行console.log()之前运行此代码,这应该允许您在执行console.log()时执行任何操作。
答案 1 :(得分:1)
虽然您无法扩展控制台,但您可以包装其中的每个方法。下面的代码拦截每个日志记录方法,并将每个调用记录在一个名为log的变量中。
var actualConsole = window.console;
var c = window.console = {};
var log={};
for (var m in actualConsole){
if (typeof console[m] ==='object'){
c[m]=console[m];
}else if (typeof actualConsole[m] ==='function'){
c[m]=function () {
var args = Array.prototype.slice.call(arguments);
log[this]=log[this]||[];
log[this].push(args);
actualConsole[this].apply(actualConsole,args);
}.bind(m);
}// else - nothing else expected
}
console.log('log',1);
console.log('log',2);
console.error('error',1);
console.warn('warn',1);
actualConsole.log('log:',log);
日志看起来像:
{"log":[["log",1],["log",2]],"error":[["error",1]],"warn":[["warn",1]]}