如何快速方便地禁用代码中的所有控制台.log语句?

2022-08-29 23:50:07

有没有办法关闭我的JavaScript代码中的所有语句,以进行测试?console.log


答案 1

在脚本中重新定义控制台.log函数。

console.log = function() {}

就是这样,不再向控制台发送消息。

编辑:

扩展Cide的想法。一个自定义记录器,可用于从代码中打开/关闭日志记录。

从我的火狐控制台:

var logger = function()
{
    var oldConsoleLog = null;
    var pub = {};

    pub.enableLogger =  function enableLogger() 
                        {
                            if(oldConsoleLog == null)
                                return;

                            window['console']['log'] = oldConsoleLog;
                        };

    pub.disableLogger = function disableLogger()
                        {
                            oldConsoleLog = console.log;
                            window['console']['log'] = function() {};
                        };

    return pub;
}();

$(document).ready(
    function()
    {
        console.log('hello');

        logger.disableLogger();
        console.log('hi', 'hiya');
        console.log('this wont show up in console');

        logger.enableLogger();
        console.log('This will show up!');
    }
 );

如何使用上面的“记录器”?在就绪事件中,调用 logger.disableLogger,以便不记录控制台消息。在要将消息记录到控制台的方法中添加对 logger.enableLogger 和 logger.disableLogger 的调用。


答案 2

以下内容更为彻底:

var DEBUG = false;
if(!DEBUG){
    if(!window.console) window.console = {};
    var methods = ["log", "debug", "warn", "info"];
    for(var i=0;i<methods.length;i++){
        console[methods[i]] = function(){};
    }
}

这将消除控制台中的常用方法(如果存在),并且可以无错误地调用它们,并且几乎没有性能开销。对于像IE6这样没有控制台的浏览器,将创建虚拟方法以防止错误。当然,Firebug中还有更多功能,例如跟踪,配置文件,时间等。如果在代码中使用它们,则可以将它们添加到列表中。

您还可以检查调试器是否具有这些特殊方法(即IE),并将其不支持的方法清零:

if(window.console && !console.dir){
var methods = ["dir", "dirxml", "trace", "profile"]; //etc etc
    for(var i=0;i<methods.length;i++){
        console[methods[i]] = function(){};
    }
}