Cum să interceptați informațiile de la un logger Rails?

În prezent, folosesc Rails v2.3.5 la lucru și sunt destul de nou în limbaj și cadru. Ceea ce trebuie să fac este să captez anumite informații de fiecare dată când un utilizator solicită o pagină Web (adresa IP a utilizatorului, adresa URL accesată, data și ora accesului și timpul pe care pagina a făcut să îl facă) și să-l stocheze într-o bază de date.

Am observat că toate aceste informații sunt conținute în fișierele de registru implicite ale Rails, dar încerc să evit să trebuiască să analizez fișierul log pentru a colecta aceste informații. Ceea ce mi-ar placea este un fel de a cârlig la logger și a intercepta această informație sau poate extinde logger și de a folosi versiunea mea extinsă în loc de Rails implicit unul (ActiveSupport :: BufferedLogger).

Poate vreodată alte soluții care nu necesită bușteni?

Mulțumesc anticipat.

0
Dacă este posibil, faceți upgrade la Rails 2.3.14 pentru a evita o securitate gravă problemă .
adăugat autor tadman, sursa

1 răspunsuri

Ceea ce probabil aveți nevoie este un bloc before_filter din aplicația dvs. ApplicationController pentru a efectua orice acțiune trebuie să faceți. De acolo puteți crea orice înregistrări de baze de date de care aveți nevoie. De exemplu:

class ApplicationController < ActionController::Base
  before_filter :log_user_info

protected
  def log_user_info
    # Activate a custom logging method on a model
    UserActivity.log!(
      # ... User parameters
    )
  end
end

Ajungerea la logger este probabil o idee proastă, deoarece este o modalitate indirectă de a obține acele informații. Este posibil să aveți nevoie să extrageți date din acest motiv din motive istorice.

0
adăugat
Am considerat o soluție similară cu aceasta, dar nu știam cum să obțin ultima metrică de care am nevoie, și anume "timpul pe care pagina a luat-o pentru a face". Poate că am putut face un calcul de timp între "înainte_filter" și "după_filter", dar timpul ar fi diferit de cel din jurnale. Există o modalitate directă de a obține timpul necesar pentru a servi pagina de la un controlor? Multumesc pentru raspunsul tau.
adăugat autor Gabriel, sursa
Mulțumesc amândoi pentru imput. Am terminat folosind filtrul around_filter și a funcționat fără probleme. Preocuparea inițială a faptului că timpii de încărcare ar fi diferiți de timpii din fișierul jurnal nu au fost fundamentați. A funcționat fără probleme.
adăugat autor Gabriel, sursa
Nu am folosit mult after_filter , dar merită luată în considerare în acest caz particular. Aș vedea cum se generează intrarea în jurnal pentru a afla unde este stocată valoarea timpului de redare. Codul sursă Rails este de obicei destul de drept înainte.
adăugat autor tadman, sursa
@Gabriel - Există, de asemenea, un around_filter . Folosind acest lucru, cu un randament între două Time.now s este un mod rapid-n-ușor de a face ceea ce descrieți aici. Noroc!
adăugat autor Xavier Holt, sursa