2011-03-29 11 views
13

Nuestros registros de producción son largos y contienen mucho más que errores. Me gustaría un segundo archivo de registro con solo los errores/excepciones en.¿Cómo puedo registrar los errores de Rails en un archivo de registro separado?

¿Esto es posible?

Estamos utilizando los carriles 2.x

Gracias.

+0

posible duplicado de [Cómo iniciar algo en rieles en un archivo de registro independiente?] (http://stackoverflow.com/questions/337739/how-to-log-something-in-rails-in-an-independent-log-file) – fl00r

+4

No creo que sea un duplicado, es una pregunta diferente. Acerca de cómo dividir automáticamente los archivos de registro estándar en partes de grano más fino, en lugar de registrar manualmente en un archivo separado. –

Respuesta

5

Por ejemplo, para registrar todos los errores ActiveRecord :: Base en un archivo llamado log/exceptions.log

new_logger = Logger.new('log/exceptions.log') 
new_logger.level = Logger::ERROR 
new_logger.error('THIS IS A NEW EXCEPTION!') 

ActiveRecord::Base.logger = new_logger 

Para los controladores y vista (porque ActionView registrador no tiene su propio registrador, por lo que depende en el registrador ActionController):

ActionController::Base.logger = new_logger 
+1

¿Hay alguna manera de hacer esto para las excepciones en general? o tal vez registrar errores erb/controlador en sus propios archivos también? –

+0

Publicada cómo hacer controladores/vistas. –

+3

¿Cómo va a tener solo los errores? ¿Está registrando claramente una información y termina en exceptions.log? – Khash

7

Intente lo siguiente. Pon el método rescue_from en tu controlador.

No he probado esto. Pero tal vez lo pone en la dirección correcta

class ApplicationController < ActionController::Base 
    rescue_from StandardError do |exception| 
    new_logger = Logger.new('log/exceptions.log') 
    new_logger.info('THIS IS A NEW EXCEPTION!') 
    new_logger.info(exception.message) 
    new_logger.info(exception.backtrace) 
    # Raise it anyway because you just want to put it in the log 
    raise exception 
    end 
end 

Si utiliza rieles 2.1 (también no probado)

class ApplicationController < ActionController::Base 
    def rescue_action_in_public(exception) 
    new_logger = Logger.new('log/exceptions.log') 
    new_logger.info('THIS IS A NEW EXCEPTION!') 
    new_logger.info(exception.message) 
    new_logger.info(exception.backtrace) 
    # Raise it anyway because you just want to put it in the log 
    raise exception 
    end 
end 
Cuestiones relacionadas