我正在使用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
我在这里问了一个旧的相关问题
感谢TamásMezei和Damien MATHIEU的最后答案
Mondher
答案 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