2009-10-27 8 views
12

Quiero guardar en un archivo de registro algunos raíles de consulta SQL (es decir, CREAR, ACTUALIZAR y ELIMINAR) por lo tanto, tengo que interceptar todas las consultas y luego filtrarlas tal vez con algunas regexp y registrarlos según sea necesario.Registrar todas las consultas SQL en la base de datos en Rails

¿Dónde colocaría tal cosa en el código de los rieles?

Respuesta

8

SQL logging in rails - En resumen: debe anular el método de ejecución de ActiveRecord. Allí puede agregar cualquier lógica para el registro.

+4

Y recuerde no interceptar las consultas de registro, o obtendrá un bucle infinito ... – DanSingerman

+0

@DanSingerman Eso supone que va a registrar las consultas en SQL. – thekingoftruth

0

SQL Server? Si es así ...

En realidad, yo haría esto en el extremo SQL. Puede configurar un seguimiento y recopilar cada consulta que proviene de una conexión con un Nombre de aplicación particular. Si lo guarda en una tabla, puede consultar fácilmente esa tabla más adelante.

13

Aquí una versión simplificada de lo que c0r0ner vinculado a, para mostrar mejor:

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

¿dónde pondrías eso? – baash05

+0

La publicación en misuse.org señala que debe cargarse mediante 'application.rb', allí podría necesitar un archivo que contenga su código de anulación. (En Rails 2, está atascado con los archivos de configuración del entorno). – alxndr

Cuestiones relacionadas