【问题标题】:How to get SQL queries for each user where env is production如何为环境为生产环境的每个用户获取 SQL 查询
【发布时间】:2009-11-09 14:20:51
【问题描述】:

我正在开发一个专门用于生成统计报告的应用程序,我希望该用户在保存他们的统计报告后也保存 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

【问题讨论】:

    标签: sql ruby-on-rails


    【解决方案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
    

    【讨论】:

    • 嗨 Damien,感谢您的回答,现在我可以过滤与所需操作相关的查询,但问题是我无法删除旧查询。蒙德尔
    猜你喜欢
    • 2019-10-14
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多