当我不debugging时,如何禁用console.log?

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

我似乎无法使用某种logging器function,并在内部使用console.log因为然后我不知道什么行解雇它。 也许只有一个try / catch,但我的日志是非常笼统的,我不想在我的代码尝试/ catch。

你会推荐什么?

我可能会滥用JavaScript的逻辑AND运算符 的短路本质,并replace下列实例:

 console.log("Foo."); 

附:

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

假设DEBUG是一个全局variables,如果启用DEBUG则该variables的值为true

这个策略避免了终​​止console.log() ,所以你仍然可以在释放模式下调用它,如果你真的必须(例如追踪在debugging模式下不会发生的问题)。

只需将console.logreplace为一个用于生产的空函数即可。

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

讨论全局函数通常是一个坏主意。

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

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

这将仍然显示正确的行号,如果需要,还保留第三方的东西预期console.log函数。

现在,在2014年,我只是使用GULP (并build议大家,这是一个了不起的工具),我已经安装了一个名为stripDebug的包,它为你做。

(我也在生产中使用closureCompilerclosureCompiler

在生产中禁用console.log的另一种方法是保持开发状态。

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

您可以更改您的开发设置,如本地主机和端口。

简单。

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

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

不要将console.log作为一个空的函数,这是浪费计算和空间。

这段代码适用于我:

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

在这里输入图像说明

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

 // 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"); 

这个Tiny包装器覆盖将包装原始的console.log方法与一个内部有一个检查的function,你可以从外面控制,加深如果你想看到控制台日志而不是。

我select了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}); 

这个覆盖应该在代码层次结构中尽可能地实现为“高”,以便在这之前“捕捉”所有的日志。 这可以扩展到所有其他console方法,如warntimedir等。