开发者

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like th开发者_运维百科at user after saving their stat report they save sql queries too. To do that I wrote the following module:

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

in the controller I wrote that

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

I also modified Rails environment by adding this line:

ActiveRecord::Base.logger.level = Logger::DEBUG

This program is working and I can get all queries but, I need only the specific queries done by one user to generate a stat report.

Is someone has any idea, Thanks,

mgatri


You could add an accessor that says if you wish to log or not.

@@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

When you do a ActiveRecord::ConnectionAdapters::AbstractAdapter::logging = true
Then, your SQL queries will be logged. When you set it to false, they won't.

So you can log them only whenever you want.

To erase the old queries, you just need to clear the array.

ActiveRecord::ConnectionAdapters::AbstractAdapter::queries.clear
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜