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 al 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?¿Cómo registro el seguimiento completo de una excepción de Ruby usando el registrador Rails predeterminado?
Respuesta
logger.error $!.backtrace
Además, no se olvide que puede
rescue ErrorType => error_name
para darle a su error de un nombre de variable distinta de la predeterminada $!
.
logger.error caller.join("\n")
deberían hacer el truco.
La forma en que lo hace es raíles
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
En Rails, ActionController::Rescue
se ocupa de él. En mis acciones del controlador de aplicación, estoy usando el método log_error
de este módulo al formato bastante traza en los registros:
def foo_action
# break something in here
rescue
log_error($!)
# call firemen
end
log_error ya no funciona en Rails 3 – Priit
Así es como yo lo haría:
Aquí está la documentación ri de Excepción # traza inversa:
Tenga en cuenta que COUL También use Kernel # caller, que también le proporciona la traza completa (menos el marco curado).
También - Tenga en cuenta que si usted está tratando de atrapar todas las excepciones, se debe rescatar de excepción, no RuntimeError.
En versiones posteriores de los carriles, simplemente elimine la línea siguiente en RAIL_ROOT/config/inicializadores/backtrace_silencers.rb (o añadir este archivo a sí mismo si no está ahí):
# Rails.backtrace_cleaner.remove_silencers!
esta manera se obtiene la plena backtrace escrito en el registro en una excepción. Esto funciona para mí en v2.3.4.
Parece que no funciona en 2.3.9 –
Es parte de la documentación de Rails 3.2.3. Vea aquí: http://api.rubyonrails.org/classes/ActiveSupport/BacktraceCleaner.html – Rob
- 1. ¿Cómo imprimir el seguimiento completo de pila en la excepción?
- 2. cambiar el formato de fecha predeterminado en ruby on rails?
- 3. Imprimir el seguimiento de la pila de una excepción
- 4. Rotación del registro de producción de Ruby on Rails
- 5. ¿Cómo puedo redireccionar el registrador a wxPython textCtrl usando un controlador de registro personalizado?
- 6. Obtener el seguimiento completo de la pila de cadenas, incluida la excepción interna
- 7. ¿Dónde almacena el registrador de raíz Python un registro?
- 8. Ruby: ¿Enviar mensajes de registrador a una variable de cadena?
- 9. registro de Django - django.request registrador y el contexto adicional
- 10. Excepción recurrente sin un seguimiento de pila: ¿cómo restablecerlo?
- 11. registrador Singleton, registrador estático, registrador de fábrica ... ¿cómo iniciar sesión?
- 12. Reemplazar controlador predeterminado de Python registrador
- 13. Log4Net/C# - Deshabilitar el registro predeterminado
- 14. Carpincho: traza de excepción en el registro
- 15. ¿Cómo establecer el formato predeterminado para una ruta en Rails?
- 16. ¿Cómo ver el historial completo de la consola de Rails?
- 17. Búsqueda de texto completo de MySQL en Ruby on Rails
- 18. jerarquía de registro vs. registrador de raíz?
- 19. Rails 3: Cómo insertar el registro en la base de datos usando Rails
- 20. Ruby on Rails - Completo conjunto de complementos anidados
- 21. ¿Registrador personalizado en Rails 3?
- 22. Registro/seguimiento condicional de C#
- 23. Seguimiento de pila completo para métodos interceptados en el sitio de llamada en Unity
- 24. Ruby on Rails: ¿cómo validar un modelo sin registro activo?
- 25. GlassFish 3: ¿cómo se cambia el formato de registro (predeterminado)?
- 26. Cómo configurar el nivel de registro predeterminado SBT para "advertir"?
- 27. directorio predeterminado Rails irb
- 28. Lanzar excepción pero persistir el seguimiento de la pila
- 29. ¿Cómo agregar un nivel de registro personalizado al registrador en ruby?
- 30. ¿Se puede configurar el registrador Ruby estándar para que se descargue después de cada mensaje?
¿Echo de menos algo? logger.error solo toma un solo argumento, por lo que el código no funciona ... –
Éste no funciona, use 'logger.error e.message +" \ n "+ e.backtrace.join (" \ n ") 'en su lugar. –
Podría jurar los múltiples parámetros trabajados hace 4 años, pero tal vez no fue así. Lo actualicé para simplemente registrar la traza inversa, que parece ser el aspecto más relevante de la pregunta; Confío en que el lector pueda descubrir que son posibles varias llamadas de registrador, lo mismo para la concatenación de cadenas (o más Ruby-y, interpolación). –