在控制台中禁用Rails SQL日志记录

时间:2011-10-13 19:19:28

标签: sql ruby-on-rails console

当我在控制台中执行命令时,有没有办法禁用SQL查询日志记录?理想情况下,如果我可以禁用它并在控制台中使用命令重新启用它,那就太棒了。

我正在尝试调试某些内容并使用“puts”打印出一些相关数据。但是,sql查询输出使得难以阅读。


修改 我找到了另一个解决方案,因为如果我的代码以外的其他东西试图调用logger.warn,则将logger设置为nil有时会引发错误

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

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

8 个答案:

答案 0 :(得分:267)

将其关闭:

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

重新开启:

ActiveRecord::Base.logger = old_logger

答案 1 :(得分:64)

这是我认为更清洁的一种变体,它仍允许从AR进行潜在的其他日志记录。在config / environments / development.rb中:

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

答案 2 :(得分:51)

这可能不是适合控制台的解决方案,但Rails有解决此问题的方法:Logger#silence

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

答案 3 :(得分:12)

如果有人想要实际淘汰SQL语句日志记录(不更改日志记录级别,同时保持其AR模型的日志记录):

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

该调试方法由ActiveSupport::LogSubscriber定义。

所以我们可以通过覆盖它来淘汰日志:

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

答案 4 :(得分:11)

对于Rails 4,您可以将以下内容放在环境文件中:

# /config/environments/development.rb

config.active_record.logger = nil

答案 5 :(得分:7)

我用过这个:config.log_level = :info 编辑config/environments/performance.rb

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

答案 6 :(得分:4)

在Rails 3.2中,我在config / environment / development.rb中执行类似的操作:

module MyApp
  class Application < Rails::Application
    console do
      ActiveRecord::Base.logger = Logger.new( Rails.root.join("log", "development.log") )
    end
  end
end

答案 7 :(得分:0)

就像FYI一样,在Rails 2中,您可以做到

ActiveRecord::Base.silence { <code you don't want to log goes here> }

显然,如果需要,可以用do end块代替大括号。

相关问题