在控制台中禁用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输出,并只显示渲染和重要信息。