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

vsy*_*ync 47 javascript debugging logging

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

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

你会推荐什么?

Fré*_*idi 51

我可能会滥用JavaScript 逻辑AND运算符的短路特性并替换以下实例:

console.log("Foo.");
Run Code Online (Sandbox Code Playgroud)

附:

DEBUG && console.log("Foo.");
Run Code Online (Sandbox Code Playgroud)

假设DEBUG是一个全局变量,它评估true是否启用了调试.

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

  • `if (DEBUG) console.log("Foo.");` 只有两个字符长并且更易读。 (2认同)

bjo*_*rnd 46

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

if (!DEBUG_MODE_ON) {
    console = console || {};
    console.log = function(){};
}
Run Code Online (Sandbox Code Playgroud)

  • @Raynos,"过早的优化是所有邪恶的根源." 当这个解决方案显着降低性能时,你真的知道任何真实情况吗?你做过任何基准吗?我敢打赌,编写一个删除所有日志记录的批处理脚本所花费的时间(并且永远不会弄乱代码)可能会更好地投入... (27认同)
  • 是的,我看到对数学受损的任何额外处理有很多下意识的反应.如果您正在执行10 ^ 6个console.logs,则调用空函数可能仍然存在问题.否则,对空函数的几百个客户端调用几乎可以忽略不计. (15认同)
  • 这是一个黑客.你在生产中浪费的计算 (8认同)
  • @Raynos实际上,多次调用空函数与应用程序的其余部分相比没什么,它只是解决问题的快捷方法. (4认同)
  • @Raynos:不,正如我所说,我同意这是一个黑客攻击.只是想指出:) (2认同)
  • @bjornd取决于您记录的数量.它加起来.这是一个黑客.使用此hack_的成本很低,但修复黑客的成本也是如此. (2认同)

nam*_*uol 30

Clobbering全球职能通常是一个坏主意.

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

var LOG = debug ? console.log.bind(console) : function () {};
Run Code Online (Sandbox Code Playgroud)

这仍将显示正确的行号,并console.log在需要时保留第三方内容的预期功能.


vsy*_*ync 14

现在,在2014年,我只是使用GULP(并推荐每个人,这是一个了不起的工具),我安装了一个名为stripDebug的软件包,它可以为您完成.

(我也用uglify,并closureCompiler在生产中)

  • 没有人会使用整个新建筑系统****来处理"生产中的console.log"问题. (3认同)

vin*_*esh 5

在生产环境中禁用console.log并将其保留在开发中的另一种方法。

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

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