2009-10-27 94 views
12

我想保存到一些SQL查询栏执行的日志文件(即CREATE,UPDATE和DELETE) 因此,我需要拦截所有查询,然后过滤它们可能与一些正则表达式并根据需要记录它们。在Rails中将每个SQL查询记录到数据库中

我会在轨道代码中放置这样的东西吗?

回答

8

SQL logging in rails - 简而言之 - 您需要重写ActiveRecord执行方法。在那里你可以添加任何用于记录的逻辑。

+4

并记住不要拦截日志查询本身,否则你会得到一个无限循环... – DanSingerman 2009-10-27 15:16:29

+0

@DanSingerman这是假设你要记录在SQL本身的查询。 – thekingoftruth 2012-06-15 22:34:45

0

SQL Server?如果是这样的话......

其实,我会在SQL端做到这一点。您可以设置跟踪,并收集通过与特定应用程序名称的连接来的每个查询。如果将它保存到表中,稍后可以轻松查询该表。

13

这里什么c0r0ner链接到简化版本,以更好地表现出来:

connection = ActiveRecord::Base.connection 
class << connection 
    alias :original_exec :execute 
    def execute(sql, *name) 
    # try to log sql command but ignore any errors that occur in this block 
    # we log before executing, in case the execution raises an error 
    begin 
     file = File.open(RAILS_ROOT + "/log/sql.txt",'a'){|f| f.puts Time.now.to_s+": "+sql} 
    rescue Exception => e 
     ; 
    end 
    # execute original statement 
    original_exec(sql, *name) 
    end 
end 
+1

你会把它放在哪里? – baash05 2012-05-29 03:04:11

+0

misuse.org上的帖子指出它应该由'application.rb'加载,在那里你可能需要一个包含你的覆盖代码的文件。 (在Rails 2上,你遇到了环境配置文件。) – alxndr 2014-05-09 23:28:54

相关问题