我正在开发一个专门用于生成统计报告的应用程序,我希望该用户在保存他们的stat报告后也能保存sql查询。为此,我写了以下模块:
module SqlHunter
class ActiveRecord::ConnectionAdapters::AbstractAdapter
@@queries = []
cattr_accessor :queries
def log_info_with_trace(sql, name, runtime)
return unless @logger && @logger.debug?
@@queries << sql
end
alias_method_chain :log_info, :trace
end
end
在我写的控制器中
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
我还通过添加以下行修改了Rails环境:
ActiveRecord::Base.logger.level = Logger::DEBUG
这个程序正在运行,我可以获得所有查询但是,我只需要一个用户完成的特定查询来生成统计报告。
有人有任何想法, 谢谢,
mgatri
答案 0 :(得分:1)
您可以添加一个访问者,说明您是否要记录。
@@queries = []
@@loging = false
cattr_accessor :queries, :logging
def log_info_with_trace(sql, name, runtime)
return unless @logger && @logger.debug?
@@queries << sql if @@logging
end
执行ActiveRecord::ConnectionAdapters::AbstractAdapter::logging = true
时
然后,将记录您的SQL查询。当你将它设置为false时,它们不会。
所以你只能随时记录它们。
要清除旧查询,只需清除阵列即可。
ActiveRecord::ConnectionAdapters::AbstractAdapter::queries.clear