如何从ActiveRecord :: Base.logger中删除SQL查询

时间:2009-11-11 07:34:08

标签: sql ruby-on-rails

我正在使用Ruby on Rails开发一个应用程序。

每当我调用一个新动作时,我想删除ActiveRecord :: Base.logger对象中的旧查询,主要是在ENV =生产的地方。

目标不是删除所有查询,例如使用config.log_level:info。我只需要最后一次查询来构建包含这些查询的文件。

以下是一些代码:

lib中的

module SqlHunter
  class ActiveRecord::ConnectionAdapters::AbstractAdapter
      @@queries = [] # without this line it work perfectly
      @@logging = false
      cattr_accessor :queries, :logging
      def log_info_with_trace(sql, name, runtime) 
        @@queries << sql if @@logging 
      end
      alias_method_chain :log_info, :trace
  end
end
控制器中的

(报告操作)

ActiveRecord::ConnectionAdapters::AbstractAdapter::logging = true

.....

sqlfile = File.open("public/advancedStats/#{@dir_name}/advancedStatQuery.sql", 'w')
@queries = ActiveRecord::ConnectionAdapters::AbstractAdapter::queries
for query in @queries do
   sqlfile.write("#{query} \n")
end
sqlfile.close

我在这里问了一个旧的相关问题

link text

感谢TamásMezei和Damien MATHIEU的最后答案

Mondher

1 个答案:

答案 0 :(得分:1)

所以你想在生产模式下过滤SQL查询,还是我错过了这一点?

如果只是过滤,prod模式会自动过滤sql查询。如果您想在开发时进行过滤,请编辑 config / environments / development.rb 文件并插入

config.log_level = :info

基本上,它将使用低于信息级别(调试内容)的所有其他内容过滤SQL。

如果您想要更复杂的解决方案,您可以随时在

中执行/覆盖 AbstractAdapter
RUBY_HOME/lib/gems/1.8/gems/activerecord-nnn/active_record/connection_adapters/abstract_adapter.rb