rails print logger log debug ruby-on-rails ruby logging

ruby on rails - print - ¿Cómo registro el seguimiento completo de una excepción de Ruby usando el registrador Rails predeterminado?



ruby logger (7)

Estoy trabajando en el proyecto de rieles y estoy tratando de obtener excepciones para que se registren en los archivos de registro de rieles. Sé que puedo llamar a logger.error $! para obtener la primera línea de la excepción registrada en el archivo. Pero, también quiero que se registre toda la pila de seguimiento. ¿Cómo registro el seguimiento completo de una excepción usando el registrador de rieles predeterminado?



En Rails, ActionController::Rescue ocupa de él. En las acciones de mi controlador de aplicaciones, estoy usando el método log_error desde este módulo para realizar log_error de formato bonito en los registros:

def foo_action # break something in here rescue log_error($!) # call firemen end


En versiones posteriores de Rails, simplemente descomente la siguiente línea en RAIL_ROOT / config / initializers / backtrace_silencers.rb (o agregue este archivo si no está allí):

# Rails.backtrace_cleaner.remove_silencers!

De esta forma, obtiene la traza trasera completa escrita en el registro en una excepción. Esto funciona para mí en v2.3.4.


La forma en que los rieles lo hacen es

137 logger.fatal( 138 "/n/n#{exception.class} (#{exception.message}):/n " + 139 clean_backtrace(exception).join("/n ") + 140 "/n/n" 141 ) 248 def clean_backtrace(exception) 249 if backtrace = exception.backtrace 250 if defined?(RAILS_ROOT) 251 backtrace.map { |line| line.sub RAILS_ROOT, '''' } 252 else 253 backtrace 254 end 255 end 256 end


También puede usar las variables predeterminadas de Ruby, como esta:

logger.error "Your error message. Exception message:#{$!} Stacktrace:#{$@}"


logger.error caller.join("/n") debería hacer el truco.


logger.error $!.backtrace

Además, no olvides que puedes

rescue ErrorType => error_name

para darle a su error un nombre de variable que no sea el $! predeterminado $! .