我想保存到一些SQL查询栏执行的日志文件(即CREATE,UPDATE和DELETE) 因此,我需要拦截所有查询,然后过滤它们可能与一些正则表达式并根据需要记录它们。在Rails中将每个SQL查询记录到数据库中
我会在轨道代码中放置这样的东西吗?
我想保存到一些SQL查询栏执行的日志文件(即CREATE,UPDATE和DELETE) 因此,我需要拦截所有查询,然后过滤它们可能与一些正则表达式并根据需要记录它们。在Rails中将每个SQL查询记录到数据库中
我会在轨道代码中放置这样的东西吗?
SQL logging in rails - 简而言之 - 您需要重写ActiveRecord执行方法。在那里你可以添加任何用于记录的逻辑。
SQL Server?如果是这样的话......
其实,我会在SQL端做到这一点。您可以设置跟踪,并收集通过与特定应用程序名称的连接来的每个查询。如果将它保存到表中,稍后可以轻松查询该表。
这里什么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
如果你正在使用MySQL我会去了解一下mysqlbinlog可以。它将跟踪可能更新数据的所有内容。您可以轻松地从该日志中清除您需要的任何内容。
作为一个说明的追随者,您可以在“记录所有查询”像Rails - See generated SQL queries in Log files,然后用grep文件为您喜欢的类型,如果需要的话。
并记住不要拦截日志查询本身,否则你会得到一个无限循环... – DanSingerman 2009-10-27 15:16:29
@DanSingerman这是假设你要记录在SQL本身的查询。 – thekingoftruth 2012-06-15 22:34:45