我想保存到一些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