将每个SQL查询记录到Rails中的数据库

我想保存一些SQL查询rails执行的日志文件(即CREATE,UPDATE和DELETE),因此我需要拦截所有查询,然后使用一些regexp过滤它们并根据需要记录它们。

我会把这样的东西放在rails代码中?

在rails中记录SQL – 简而言之 – 您需要覆盖ActiveRecord execute方法。 在那里,您可以添加任何记录逻辑。

这里是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 

作为关注者的注释,您可以“记录所有查询”,如Rails – 在日志文件中查看生成的SQL查询 ,然后根据需要grep文件以获取所需的文件。

如果您使用的是mysql,我会查看mysqlbinlog。 它将跟踪可能更新数据的所有内容。 您可以轻松地从该日志中删除所需内容。

http://dev.mysql.com/doc/refman/5.0/en/mysqlbinlog.html

http://dev.mysql.com/doc/refman/5.0/en/binary-log.html

SQL Server? 如果是这样…

实际上,我会在SQL端执行此操作。 您可以设置跟踪,并收集通过与特定应用程序名称的连接提供的每个查询。 如果将其保存到表中,以后可以轻松查询该表。