2009-10-27 100 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

相關問題