Rails日志:仅在日志中显示创建,更新和销毁SQL语句,而不显示任何其他内容

时间:2016-05-13 16:55:26

标签: ruby-on-rails ruby

我只想在日志中看到与CREATE / UPDATE / DESTROY相关的sql语句。我不希望任何与READ相关的语句,缓存或日志中显示的任何其他信息,因为它很难筛选出来。

目前在app/config/environments/production.rb范围内,我有以下配置集在日志中显示太多:

config.log_level = :debug

生产的默认配置显示的信息太少。它忽略了我想看到的所有sql语句:

# shows too little information
config.log_level = :info

rails中是否有配置设置让日志仅输出我想要查看的信息?如果不是:我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

您可以通过将ActiveRecord设置为log_level来禁用:info数据库查询的记录。

然后使用Rails'ActiveSupport::Instrumentation并订阅sql.active_record事件。

只需将以下代码添加到初始值设定项中:

# in `config/initializers/query_logger.rb`
class QueryLogger
  def call(name, started, finished, unique_id, payload)
    query = payload[:sql]

    Rails.logger.info("SQL Query: #{query}") unless query.start_with?('SELECT')
  end
end

ActiveSupport::Notifications.subscribe('sql.active_record', QueryLogger.new)