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

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

 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。