How do I disable console.log when I am not debugging?
I would probably abuse the short-circuiting nature of JavaScript's logical AND operator and replace instances of:
console.log("Foo.");
With:
DEBUG && console.log("Foo.");
Assuming DEBUG
is a global variable that evaluates to true
if debugging is enabled.
This strategy avoids neutering console.log()
, so you can still call it in release mode if you really have to (e.g. to trace an issue that doesn't occur in debug mode).
Clobbering global functions is generally a bad idea.
Instead, you could replace all instances of console.log
in your code with LOG
, and at the beginning of your code:
var LOG = debug ? console.log.bind(console) : function () {};
This will still show correct line numbers and also preserve the expected console.log
function for third party stuff if needed.
Since 2014, I simply use GULP (and recommend everyone to, it's an amazing tool), and I have a package installed which is called stripDebug which does that for you.
(I also use uglify
and closureCompiler
in production)
Update (June 20, 2019)
There's a Babel Macro that automatically removes all console
statements:
https://www.npmjs.com/package/dev-console.macro
Just replace the console.log with an empty function for production.
if (!DEBUG_MODE_ON) {
console = console || {};
console.log = function(){};
}