在rails 4控制台中,如何将所有sql活动记录到文件但不记录到控制台输出?

时间:2015-05-12 11:13:51

标签: ruby-on-rails-4 activerecord logging rails-console

许多类似的问题询问如何在控制台窗口中隐藏sql日志,答案建议更改Active Record的日志级别或完全关闭AR日志记录。

但是我仍然希望AR记录所有内容,我只想将其记录到文件中,而不是记录到控制台输出窗口(因为它使控制台变得嘈杂,所以我看不到我的手动日志)。

我如何实现我的目标?

1 个答案:

答案 0 :(得分:2)

ActiveRecord::Railtie代码表示将记录器消息广播到控制台:

# When loading console, force ActiveRecord::Base to be loaded
# to avoid cross references when loading a constant for the
# first time. Also, make it output to STDERR.
console do |app|
  require "active_record/railties/console_sandbox" if app.sandbox?
  require "active_record/base"
  console = ActiveSupport::Logger.new(STDERR)
  Rails.logger.extend ActiveSupport::Logger.broadcast console
end

因此,当您第一次进入控制台时,您可以做的一件事是将ActiveRecord::Base.logger设置为不将其消息广播到控制台的新记录器。例如:

ActiveRecord::Base.logger = ActiveSupport::Logger.new("log/development.log")

“log / development.log”可以更改为您希望发送SQL输出的位置。