当我不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的包,它为你做。
(我也在生产中使用closureCompiler
和closureCompiler
)
在生产中禁用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
方法,如warn
, time
, dir
等。