当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何快速方便地禁用我的代码中的所有console.log语句?》经验,为你挑选了11个好方法。

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



1> SolutionYogi..:

在脚本中重新定义console.log函数.

console.log = function() {}

就是这样,没有更多的消息来控制台.

编辑:

扩展了Cide的想法.一个自定义记录器,可用于从代码中切换日志记录开/关.

从我的Firefox控制台:

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!');
    }
 );

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


console.log = function(){}似乎在Firefox中不起作用.您仍然会收到"未定义控制台"错误.

2> mwilcox..:

以下是更彻底的:

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

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

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

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



3> Cide..:

据我可以从告诉文档,萤火虫不提供任何变量来切换调试状态.相反,将console.log()包装在有条件地调用它的包装中,即:

DEBUG = true; // set to false to disable debugging
function debug_log() {
    if ( DEBUG ) {
        console.log.apply(this, arguments);
    }
}

要不必更改所有现有呼叫,您可以使用此代码:

DEBUG = true; // set to false to disable debugging
old_console_log = console.log;
console.log = function() {
    if ( DEBUG ) {
        old_console_log.apply(this, arguments);
    }
}


如果您在编辑器中具有良好的查找/替换功能,这也是正确的方法.
至少如果您使用jQuery,则无需编写自己的包装器,顺便说一句。jQuery调试插件效果很好。此外,它还提供了在没有浏览器的情况下在控制台上模拟console.log的功能。http://trainofthoughts.org/blog/2007/03/16/jquery-plugin-debug/

4> istepaniuk..:

你不应该!

覆盖内置函数不是一个好习惯.也无法保证您将抑制所有输出,您使用的其他库可能会还原您的更改,还有其他可能写入控制台的函数; .dir(),.warning(),.error(),.debug(),.assert()等.

正如一些人所建议的那样,您可以DEBUG_MODE有条件地定义变量和日志.根据代码的复杂性和性质,编写自己的记录器对象/函数可能是一个好主意,该对象/函数包含控制台对象并具有内置的此功能.那将是处理仪器的合适场所.

也就是说,出于"测试"目的,您可以编写测试而不是打印到控制台.如果您没有进行任何测试,并且这些console.log()行只是帮助您编写代码,只需删除它们即可.


`"你使用的其他库可以恢复你的更改"`:如果我在一开始就禁用`console.log`,它们就无法恢复到旧的功能.好吧,他们可以重写`console.log`源代码,但为什么呢?`"编写自己的记录器对象/函数来包装控制台对象可能是一个好主意"`:我过去做过这个,这是个坏主意.控制台输出的跟踪是指包装器而不是调用它的行,这使得调试更加困难.
@LucasMalor"一开始"意味着代码耦合到该基础结构,从而限制了它的可重用性.但是很难概括; 在游戏中,一些DOM动画与复杂SPA中的域逻辑不同,后者不应该是浏览器感知的,更不用说知道一些叫做"控制台"的东西了.在这种情况下,你应该有一个适当的测试策略,而不是黑客攻击一些`console.log('看,它到达这一点');`在你的代码中,当其他一切都失败时,你确实可以使用`debugger;`指令.
@MarcoSulla我认为他正在编写更清晰的代码.说"......你不应该使用JS"有点沉重.理想情况下,作为程序员,无论您的环境如何,您都应该尽可能模块化; 如果它不关心浏览器,那么你可以在更多的地方部署它:这是一个不用担心破坏你的东西的依赖.所以,恕我直言,他确实是对的.请记住,您首先会说"如果您创建一个通用的基本模板......",它本身就会引入依赖关系.这种想法使软件复杂化.值得深思.

5> Joey Schoole..:

我意识到这是一个老帖子,但它仍然出现在谷歌搜索结果的顶部,所以这里有一个更优雅的非jQuery解决方案,适用于最新的Chrome,FF和IE.

(function (original) {
    console.enableLogging = function () {
        console.log = original;
    };
    console.disableLogging = function () {
        console.log = function () {};
    };
})(console.log);



6> Scott Greenf..:

我知道你问过如何禁用console.log,但这可能是你真正想要的.这样您就不必显式启用或禁用控制台.它只是为那些没有打开或安装它的人防止那些讨厌的控制台错误.

if(typeof(console) === 'undefined') {
    var console = {};
    console.log = console.error = console.info = console.debug = console.warn = console.trace = console.dir = console.dirxml = console.group = console.groupEnd = console.time = console.timeEnd = console.assert = console.profile = function() {};
}



7> Swanidhi..:

只需更改标志DEBUG即可覆盖console.log函数.这应该可以解决问题.

var DEBUG = false;
// ENABLE/DISABLE Console Logs
if(!DEBUG){
  console.log = function() {}
}


我更进一步,将其包装在记录器函数/类中.像这样:`function myLog(msg){if(debug){console.log(msg); }

8> Xavier13..:

我很惊讶所有那些没有人结合的答案:

没有jquery

匿名函数不污染全局命名空间

处理window.console未定义的情况

只需修改控制台的.log功能即可

我会这样做:

(function () {

    var debug = false

    if (debug === false) {
        if ( typeof(window.console) === 'undefined') { window.console = {}; }
        window.console.log = function () {};
    }
})()



9> Chris S..:

如果您使用的是IE7,则不会定义控制台.所以更友好的IE版本将是:

if (typeof console == "undefined" || typeof console.log == "undefined") 
{
   var console = { log: function() {} }; 
}



10> graphefruit..:

在我搜索了这个问题以及在我的cordova应用程序中尝试过之后,我只是想警告每个开发人员都不要覆盖Windows手机

    console.log

因为应用程序会在启动时崩溃.

如果你是幸运的话,如果你正在开发本地,它不会崩溃,但是在商店中提交会导致应用程序崩溃.

只是覆盖

    window.console.log 

如果你需要.

这在我的应用程序中有效:

   try {
        if (typeof(window.console) != "undefined") {
            window.console = {};
            window.console.log = function () {
            };
            window.console.info = function () {
            };
            window.console.warn = function () {
            };
            window.console.error = function () {
            };
        }

        if (typeof(alert) !== "undefined") {
            alert = function ()
            {

            }
        }

    } catch (ex) {

    }



11> Justin..:

这是来自SolutionYogiChris S.的答案的混合.它维护console.log行号和文件名.示例jsFiddle.

// Avoid global functions via a self calling anonymous one (uses jQuery)
(function(MYAPP, $, undefined) {
    // Prevent errors in browsers without console.log
    if (!window.console) window.console = {};
    if (!window.console.log) window.console.log = function(){};

    //Private var
    var console_log = console.log;  

    //Public methods
    MYAPP.enableLog = function enableLogger() { console.log = console_log; };   
    MYAPP.disableLog = function disableLogger() { console.log = function() {}; };

}(window.MYAPP = window.MYAPP || {}, jQuery));


// Example Usage:
$(function() {    
    MYAPP.disableLog();    
    console.log('this should not show');

    MYAPP.enableLog();
    console.log('This will show');
});

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有