2009-10-27 17 views
12

Chcę zapisać do pliku dziennika niektóre rails zapytania SQL wykonuje (tj. CREATE, UPDATE i DELETE) Dlatego muszę przechwycić wszystkie zapytania, a następnie filtrować je może z niektórych wyrejestruj i zarejestruj je w razie potrzeby.Zapisywanie wszystkich zapytań SQL do bazy danych w Railsach

Gdzie umieścić coś takiego w kodzie?

Odpowiedz

8

SQL logging in rails - W skrócie - należy zastąpić metodę wykonywania ActiveRecord. Tam możesz dodać dowolną logikę do logowania.

+4

Pamiętaj, aby nie przechwytywać samych zapytań do pozyskania, lub uzyskasz nieskończoną pętlę ... – DanSingerman

+0

@DanSingerman Zakładamy, że będziesz logował zapytania w samym SQL. – thekingoftruth

0

Serwer SQL? Jeśli tak ...

Właściwie to zrobiłbym to na końcu SQL. Możesz skonfigurować śledzenie i zbierać wszystkie zapytania przychodzące przez połączenie z określoną nazwą aplikacji. Jeśli zapiszesz go w tabeli, możesz łatwo przesłać zapytanie do tej tabeli później.

13

Oto uproszczona wersja tego, co c0r0ner powiązany, aby lepiej pokazać go:

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

gdzie to umieścisz? – baash05

+0

Wpis na stronie misuse.org zwraca uwagę, że powinien on zostać załadowany przez 'application.rb', w tym miejscu możesz potrzebować pliku zawierającego kod nadpisujący. (W Rails 2 utkniesz w plikach konfiguracyjnych środowiska.) – alxndr

Powiązane problemy