如何使用默认的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。

  • 如何在Factory Girl中创buildhas_and_belongs_to_many关联
  • 找不到JavaScript运行时。 有关可用运行时的列表,请参阅https://github.com/sstephenson/execjs。 (ExecJS :: RuntimeUnavailable)
  • BDD与黄瓜和rspec - 何时是多余的?
  • Rails属于许多模型
  • 尝试安装pg gem时找不到'libpq-fe.h头文件
  • 我如何删除特殊字符?
  • 我如何testingRails迁移?
  • 如何在Rails 3中订购包含的元素
  • deviselogin的根路线导轨3
  • 在导轨迁移中,你怎样去除一个字段的限制
  • 没有主机链接到! 请提供:host参数或设置default_url_options