log backtrace,rescue_from和自定义错误页面

guy*_*ler 4 ruby-on-rails ruby-on-rails-3 airbrake

我试图在rails 3.0.20和ruby 1.8.7的项目中创建自定义错误页面.

无论如何在我的应用控制器:

unless Rails.application.config.consider_all_requests_local
  rescue_from Exception, :with => :render_error
  rescue_from ActionController::RoutingError, ActionController::UnknownController,      ::AbstractController::ActionNotFound, ActiveRecord::RecordNotFound, :with =>    :render_error_not_found
end
Run Code Online (Sandbox Code Playgroud)

然后是渲染错误方法:

def render_error(exception)
  notify_airbrake(exception)
  Rails.logger.fatal exception
  Rails.logger.fatal exception.backtrace.join("\n")
  respond_to do |format|
    format.html { render :template => "errors/error_500", :layout => 'layouts/application'}
    format.all { render :nothing => true, :status => 500 }
  end
end
Run Code Online (Sandbox Code Playgroud)

现在我的日志似乎充满了比通常的回溯更长的时间.为什么会这样?有没有办法只显示回溯的"重要"部分?在这里打电话给空气制动器是否正确?

谢谢

rai*_*inz 7

查看http://api.rubyonrails.org/classes/ActiveSupport/BacktraceCleaner.html.Rails在显示之前使用它来清理你的背景.

你可以像这样使用它:

Rails.backtrace_cleaner.clean(exception.backtrace)
Run Code Online (Sandbox Code Playgroud)

我实际上在查看rails源代码,因为我认为你的异常可能在它到达render_error方法时已经被清除了.