如何使用默认的Railslogging器loggingRubyexception的整个踪迹?

我正在rails项目,我正在尝试获取exceptionlogging到rails日志文件。 我知道我可以调用logger.error $! 获取logging到文件的exception的第一行。 但是,我想要获取整个跟踪堆栈。 如何使用默认的轨道logging器logging一个exception的整个轨迹?

6 Solutions collect form web for “如何使用默认的Railslogging器loggingRubyexception的整个踪迹?”

 logger.error $!.backtrace 

另外,不要忘记你可以

 rescue ErrorType => error_name 

给你的错误一个variables名称以外的默认$!

轨道是这样的

 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 

在Rails的后续版本中,只需在RAIL_ROOT / config / initializers / backtrace_silencers.rb中取消注释以下行(如果不存在则添加此文件本身):

 # Rails.backtrace_cleaner.remove_silencers! 

通过这种方式,您可以将完整的回溯写入日志中的exception。 这在v2.3.4中适用于我。

logger.error caller.join("\n")应该做的伎俩。

在Rails中, ActionController::Rescue处理它。 在我的应用程序控制器的行动,我使用从这个模块的方法log_error格式在日志回溯:

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

以下是我将如何做到这一点:

http://gist.github.com/127708

以下是Exception#backtrace的ri文档:

http://gist.github.com/127710

请注意,你也可以使用Kernel#caller,它可以给你完整的trace(减去框架)。

http://gist.github.com/127709

另外 – 请注意,如果您试图捕获所有exception,则应该从Exception中解救出来,而不是RuntimeError。

  • 回形针exception:Paperclip :: AdapterRegistry :: NoHandlerError
  • 什么是最好的Ruby on Rails应用程序的Web服务器?
  • 我怎样才能看到由Ruby on Rails中给定的ActiveRecord查询生成的SQL
  • Rails 4 - 强大的参数 - 嵌套的对象
  • 如何用Ruby on RailsparsingJSON?
  • join多个具有活动logging的表格
  • 有没有一个干净的方法,以避免调用一个嵌套的参数哈希零的方法?
  • 如何将哈希键从“符号”更改为“string”?
  • RSpec:let和a之前的区别是什么?
  • ActiveRecord或查询
  • 在导轨迁移中,你怎样去除一个字段的限制