在控制台中禁用Rails SQL日志logging

有没有办法禁用SQL查询日志logging时,我在控制台中执行命令? 理想情况下,如果我可以禁用它并通过控制台中的命令重新启用,那将是非常好的。

我试图debugging一些东西,用“puts”打印出一些相关的数据。 但是,sql查询输出使其难以阅读。


编辑:我发现另一个解决scheme,因为设置logging器为零有时会引发错误,如果我的代码以外的东西试图调用logger.warn

而不是设置logging器nil您可以将logging器的级别设置为1

 ActiveRecord::Base.logger.level = 1 # or Logger::INFO 

要closures它:

 old_logger = ActiveRecord::Base.logger ActiveRecord::Base.logger = nil 

重新打开它:

 ActiveRecord::Base.logger = old_logger 

这里有一个我认为更清洁的变体,它仍然允许来自AR的其他日志logging。 在config / environments / development.rb中:

 config.after_initialize do ActiveRecord::Base.logger = Rails.logger.clone ActiveRecord::Base.logger.level = Logger::INFO end 

这可能不是适合于控制台的解决scheme,但Rails有一个解决这个问题的方法: logging器#沉默

 ActiveRecord::Base.logger.silence do # the stuff you want to be silenced end 

如果有人想要实际敲除SQL语句日志logging(不改变日志级别,并保持从他们的AR模型的日志logging):

写入日志的行(无论如何,在Rails 3.2.16中)是调用lib/active_record/log_subscriber.rb:50的调用。

该debugging方法由ActiveSupport::LogSubscriber定义。

所以我们可以通过覆盖它来敲除日志logging,如下所示:

 module ActiveSupport class LogSubscriber def debug(*args, &block) end end end 

对于Rails 4,你可以把以下内容放在一个环境文件中:

 # /config/environments/development.rb config.active_record.logger = nil 

在Rails 3.2中,我在config / environment / development.rb中做了这样的事情:

 module MyApp class Application < Rails::Application console do ActiveRecord::Base.logger = Logger.new("#{Rails.root}/log/development.log") end end end 

我用这个: config.log_level = :info edit-in config/environments/performance.rb

非常适合我,拒绝SQL输出,并只显示渲染和重要信息。