Tutte le query eseguite dalla applicazione rubyonrail vengono memorizzate nei rispettivi file log (development, production ..) E' possibile salvare tali dati su database, o meglio salvare le query eseguite da ogni azione? Esistono già dei plugin in merito?
on 2009-07-02 16:55
on 2009-07-02 17:31
mmh.. immagino di si... prova a guardare se esiste gia un logger che lavora su database.. Alternativamente bisogna cercare chi logga quelle query (dove soprattutto) ed intercettarlo :D Sandro 2009/7/2 Dboz Dboz <a.dallabenetta@gmail.com>
on 2009-07-02 17:40
Dboz Dboz wrote: > Tutte le query eseguite dalla applicazione rubyonrail vengono > memorizzate nei rispettivi file log (development, production ..) > E' possibile salvare tali dati su database, o meglio salvare le query > eseguite da ogni azione? Esistono già dei plugin in merito? Googlando si trova qualcuno che ha rediretto tutto il log della sua macchina, Rails incluso, verso un db usando syslog-ng. Ci sono dei link a http://stackoverflow.com/questions/1070613/error-logging-in-rails-using-mysql Dovresti però cambiare la configurazione (ti interessa solo Rails) e dovresti anche trovare il modo di mandare nel db solo le query. A questo punto ti consiglierei piuttosto di lasciar stare syslog-ng e mettere mano alle classi di logging di Rails. Guarda il codice del metodo module ActiveSupport class BufferedLogger def add(severity, message = nil, progname = nil, &block) ... end end end nella lib della rispettiva gemma. Dovresti crearti un file nella lib della tua applicazione Rails che lo riscrive estraendo le query dal message e inviandolec al db. Ovviamente non devi loggare questi accessi al db, pena temo un loop infinito, per cui dovrai usare il metodo silence del BufferedLogger http://api.rubyonrails.org/classes/ActiveSupport/BufferedLogger.html#M001816 Secondo me in una mezza giornata te la cavi. Paolo
on 2009-07-03 10:49
2009/7/3 Dboz Dboz <a.dallabenetta@gmail.com>:
> Grazie!!! Mi metto al lavoro
non è che poi pubblichi anche il risultato? potrebbe essere utile a tanti.
pietro
on 2009-07-03 11:05
A quest link
http://blog.gugl.org/archives/47
spiega molto bene come sovrascrivere il metodo add della classe
BufferedLogger e come configurarlo nell'enviroment.
Questa è la riga dove di modifica l'output che andrà nel file di log
message = "#{Time.now.to_formatted_s(:db)} #{SEVERITIES[severity]}
#{message.strip}" +" the end \n"
L'informazione che a me interessa è il tempo di esecuzione dell'azione
eseguita dal controller per intercettare qualche anomalia o disfunzione
nell'applicazione
Ho creato il metodo
def add_visit
visit = Visit.new
visit.ip = request.remote_ip
visit.url = request.request_uri
visit.user_id = current_user.id
visit.controller_name = request.path_parameters['controller']
visit.action_name = request.path_parameters['action']
visit.domain_name = request.domain
visit.subdomain_name = request.subdomains
visit.port_integer = request.port
visit.port_string = request.port_string
visit.protocol_name = request.protocol
visit.execution_time !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
visit.save
end
nella classe ApplicationController < ActionController::Base che faccio
eseguire in determinati controller che mi interessa, una sorta di
contavisite.
Per intenderci l'informazione che a me serve è: Completed in 549ms più
in particolare 549
2009-07-03 10:36:32 INFO ==>>Completed in 549ms<== (View: 185, DB: 22)
| 200 OK [http://localhost/manufacturing/product_composed]
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.