监视JavaScript输出,例如console.log()

Monitor JavaScript output, such as console.log()

本文关键字:log console 例如 JavaScript 输出 监视      更新时间:2023-09-26

我一直在谷歌和各种JavaScript网站上搜寻,但我还没有找到答案。有没有什么方法可以使用JavaScript/JQuery来监视事件,如console.log()?

例如,即使一个单独的、繁琐的脚本调用console.log('foo');,我也想触发一个。当使用任何带有JavaScript控制台的web检查器时,当脚本记录它时,很容易看到foo弹出,但有没有方法可以用不同的脚本挂接该事件?

从javascript中借用的代码我可以扩展控制台对象(用于重新路由日志记录)吗?:

(function() {
    var exLog = console.log;
    console.log = function(msg) {
        exLog.apply(console, arguments);
        alert(msg);
    }
})()

这应该允许您在console.log()执行后执行任何操作,只要此代码在console.log()执行之前运行即可。

虽然不能扩展控制台,但可以包装它的每个方法。下面的代码截取每个日志记录方法,并将每个调用记录在一个名为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]]}