我不调试时如何禁用console.log?

时间:2011-09-21 13:44:50

标签: javascript debugging logging

我的代码中有很多console.log或任何其他控制台调用),我只想使用它们 当我的应用程序处于某种“调试模式”时。

我似乎无法使用某种记录器功能并在内部使用console.log因为那时我不知道是什么行触发了它。也许只有try / catch,但我的日志非常通用,我不想在我的代码中尝试/ catch。

你会推荐什么?

12 个答案:

答案 0 :(得分:49)

我可能会滥用JavaScript short-circuitinglogical AND operator性质并替换以下实例:

console.log("Foo.");

使用:

DEBUG && console.log("Foo.");

假设DEBUG是一个全局变量,如果启用调试,则计算结果为true

此策略可避免中断console.log(),因此如果您确实需要(例如,跟踪调试模式中未发生的问题),您仍可以在发布模式下调用它。

答案 1 :(得分:45)

只需将console.log替换为空函数即可生成。

if (!DEBUG_MODE_ON) {
    console = console || {};
    console.log = function(){};
}

答案 2 :(得分:28)

讨论全球职能通常是一个坏主意。

相反,您可以使用console.log替换代码中LOG的所有实例,并在代码的开头替换:

var LOG = debug ? console.log.bind(console) : function () {};

如果需要,这仍然会显示正确的行号,并保留第三方内容的预期console.log功能。

答案 3 :(得分:14)

现在,在2014年,我只是使用GULP(并推荐所有人,这是一个了不起的工具),我安装了一个名为stripDebug的软件包。您。

(我还在生产中使用uglifyclosureCompiler

答案 4 :(得分:4)

另一种在生产中禁用console.log并使其保持开发的方法。

// overriding console.log in production
if(window.location.host.indexOf('localhost:9000') < 0) {
    console.log = function(){};
}

您可以更改开发设置,例如localhost和port。

答案 5 :(得分:1)

简单。

添加一个小的bash脚本,找到对console.log的所有引用并删除它们。

确保此批处理脚本作为部署到生产的一部分运行。

不要将console.log称为空函数,这会浪费计算和空间。

答案 6 :(得分:0)

此代码适用于我:

if(console=='undefined' || !console || console==null) {
  var console = {
    log : function (string) {
        // nothing to do here!!
    }
  }
}

答案 7 :(得分:0)

enter image description here

最新版本的chrome显示哪个文件行触发了console.log。如果您正在寻找日志管理系统,可以尝试logeek它允许您控制要查看的日志组。

答案 8 :(得分:0)

// In Development:
var debugMode = true

// In Prod:
var debugMode = false

// This function logs console messages when debugMode is true .
function debugLog(logMessage) {
    if (debugMode) {
        console.log(logMessage);
    }
}

// Use the function instead of console.log
debugLog("This is a debug message");

答案 9 :(得分:0)

这个微小的包装器覆盖将包含原始console.log方法,其中包含一个内部检查的函数,您可以从外部进行控制,如果您想查看控制台日志,则加深。

我选择window.allowConsole作为示例标志,但在现实生活中使用它可能是另一回事。取决于你的框架。

(function(cl){
  console.log = function(){
    if( window.allowConsole )
      cl(...arguments); 
  }
})(console.log)

用法:

// in development (allow logging)
window.allowConsole = true;
console.log(1,[1,2,3],{a:1});

// in production (disallow logging)
window.allowConsole = false;
console.log(1,[1,2,3],{a:1});

此覆盖应实现为&#34; high&#34;尽可能在代码层次结构中,以便#34; catch&#34;之前发生的所有日志。这可以扩展到所有其他console方法,例如warntimedir等等。

答案 10 :(得分:0)

控制台不仅可以记录日志,还可以显示错误警告等。 这是一个覆盖所有控制台输出的功能

(function () {
    var method;
    var noop = function noop() { };
    var methods = [
    'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
    'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
    'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
    'timeStamp', 'trace', 'warn'
    ];
    var length = methods.length;
    var console = (window.console = window.console || {});

    while (length--) {
        method = methods[length];
        console[method] = noop;
    }
}());

在这里参考详细的帖子 https://stapp.space/disable-javascript-console-on-production/

答案 11 :(得分:0)

如果您使用Webpack,则可以将Terser plugindrop_consolepure_funcs选项一起使用。

minimizer: [
    new TerserPlugin({
        terserOptions: {
            compress: {
                drop_console: true
            }
        }
    }),
]