覆盖 console.log(); 用于生产
IT技术
javascript
debugging
2021-01-19 08:54:00
6个回答
把它放在文件的顶部:
var console = {};
console.log = function(){};
对于某些浏览器和缩小器,您可能需要将其应用到 window 对象上。
window.console = console;
或者,如果您只想重新定义控制台的行为(例如为了添加日志),您可以执行以下操作:
// define a new console
var console=(function(oldCons){
return {
log: function(text){
oldCons.log(text);
// Your code
},
info: function (text) {
oldCons.info(text);
// Your code
},
warn: function (text) {
oldCons.warn(text);
// Your code
},
error: function (text) {
oldCons.error(text);
// Your code
}
};
}(window.console));
//Then redefine the old console
window.console = console;
能够在生产版本中切换日志记录将非常有用。下面的代码默认关闭记录器。
当我需要查看日志时,我只需debug(true)
在控制台中输入即可。
var consoleHolder = console;
function debug(bool){
if(!bool){
consoleHolder = console;
console = {};
Object.keys(consoleHolder).forEach(function(key){
console[key] = function(){};
})
}else{
console = consoleHolder;
}
}
debug(false);
彻底地说,这会覆盖所有控制台方法,而不仅仅是console.log
.
我使用的东西类似于 posit labs 所做的。将控制台保存在一个闭包中,您就可以在一个便携式功能中拥有它。
var GlobalDebug = (function () {
var savedConsole = console;
return function(debugOn,suppressAll){
var suppress = suppressAll || false;
if (debugOn === false) {
console = {};
console.log = function () { };
if(suppress) {
console.info = function () { };
console.warn = function () { };
console.error = function () { };
} else {
console.info = savedConsole.info;
console.warn = savedConsole.warn;
console.error = savedConsole.error;
}
} else {
console = savedConsole;
}
}
})();
只需执行 globalDebug(false) 以关闭日志消息或执行 globalDebug(false,true) 以删除所有控制台消息。
console.log = function(){};
像其他任何事情一样覆盖它。