有没有办法关闭console.log
我的 JavaScript 代码中的所有语句,以进行测试?
如何快速方便地禁用我代码中的所有 console.log 语句?
在脚本中重新定义 console.log 函数。
console.log = function() {}
就是这样,没有更多的消息要控制台。
编辑:
扩展 Cide 的想法。一个自定义记录器,您可以使用它来切换代码中的日志记录开/关。
从我的 Firefox 控制台:
var logger = function()
{
var oldConsoleLog = null;
var pub = {};
pub.enableLogger = function enableLogger()
{
if(oldConsoleLog == null)
return;
window['console']['log'] = oldConsoleLog;
};
pub.disableLogger = function disableLogger()
{
oldConsoleLog = console.log;
window['console']['log'] = function() {};
};
return pub;
}();
$(document).ready(
function()
{
console.log('hello');
logger.disableLogger();
console.log('hi', 'hiya');
console.log('this wont show up in console');
logger.enableLogger();
console.log('This will show up!');
}
);
如何使用上面的“记录器”?在您的就绪事件中,调用 logger.disableLogger 以便不记录控制台消息。在要将消息记录到控制台的方法中添加对 logger.enableLogger 和 logger.disableLogger 的调用。
下面是更彻底的:
var DEBUG = false;
if(!DEBUG){
if(!window.console) window.console = {};
var methods = ["log", "debug", "warn", "info"];
for(var i=0;i<methods.length;i++){
console[methods[i]] = function(){};
}
}
如果存在,这会将控制台中的常用方法归零,并且可以毫无错误地调用它们并且几乎没有性能开销。在没有控制台的 IE6 浏览器的情况下,将创建虚拟方法以防止错误。当然,Firebug 中还有更多功能,如跟踪、配置文件、时间等。如果您在代码中使用它们,可以将它们添加到列表中。
您还可以检查调试器是否具有这些特殊方法(即 IE)并将其不支持的方法归零:
if(window.console && !console.dir){
var methods = ["dir", "dirxml", "trace", "profile"]; //etc etc
for(var i=0;i<methods.length;i++){
console[methods[i]] = function(){};
}
}
据我从文档中得知,Firebug 不提供任何变量来切换调试状态。相反,将 console.log() 包装在有条件调用它的包装器中,即:
DEBUG = true; // set to false to disable debugging
function debug_log() {
if ( DEBUG ) {
console.log.apply(this, arguments);
}
}
为了不必更改所有现有调用,您可以使用它:
DEBUG = true; // set to false to disable debugging
old_console_log = console.log;
console.log = function() {
if ( DEBUG ) {
old_console_log.apply(this, arguments);
}
}
你不应该!
覆盖内置函数不是一个好习惯。也不能保证您会抑制所有输出,您使用的其他库可能会恢复您的更改,并且还有其他函数可能会写入控制台;.dir()
,.warning()
,.error()
,.debug()
,.assert()
等。
正如一些人所建议的,您可以定义一个DEBUG_MODE
变量并有条件地记录。根据代码的复杂性和性质,编写自己的记录器对象/函数来封装控制台对象并内置此功能可能是个好主意。那将是处理仪器的正确位置。
也就是说,出于“测试”目的,您可以编写测试而不是打印到控制台。如果您不进行任何测试,并且这些console.log()
行只是帮助您编写代码,只需删除它们即可。
我意识到这是一篇旧帖子,但它仍然出现在 Google 结果的顶部,所以这里有一个更优雅的非 jQuery 解决方案,适用于最新的 Chrome、FF 和 IE。
(function (original) {
console.enableLogging = function () {
console.log = original;
};
console.disableLogging = function () {
console.log = function () {};
};
})(console.log);