Skip to content
our hacks to exception_logger
Ruby JavaScript
Find file
New pull request
Pull request Compare This branch is 2 commits ahead, 10 commits behind defunkt:master.
Latest commit 2a89cb0 @anotherjesse ensure proper mime/type via format.js on show/destroy
in production we get text/html as the mime type even though
it was rendering the rjs file, causing prototype not to show the update



The Exception Logger (forgive the horrible name) logs your Rails exceptions in the database and provides a funky web interface to manage them.

First you need to generate the migration:

  ./script/generate exception_migration

Next, you'll need to include the ExceptionLoggable module into ApplicationController.  Once that's done you might want to modify key methods to customize the logging:

  render_404(exception) - Shows the 404 template.
  render_500(exception) - Shows the 500 template.
  log_exception(exception) - Logs the actual exception in the database.
  rescue_action_in_public(exception) - Does not log these exceptions: ActiveRecord::RecordNotFound, ActionController::UnknownController, ActionController::UnknownAction

After that, visit /logged_exceptions in your application to manage the exceptions.

It's understandable that you may want to require authentication.  Add this to your config/environments/production.rb:

  # config/environments/production.rb
  config.after_initialize do
    require 'application' unless Object.const_defined?(:ApplicationController)
    LoggedExceptionsController.class_eval do
      # set the same session key as the app
      session :session_key => '_beast_session_id'
      # include any custom auth modules you need
      include AuthenticationSystem
      before_filter :login_required
      # optional, sets the application name for the rss feeds
      self.application_name = "Beast"
        # only allow admins
        # this obviously depends on how your auth system works
        def authorized?
        # assume app's login required doesn't use http basic
        def login_required_with_basic
          respond_to do |accepts|
            # alias_method_chain will alias the app's login_required to login_required_without_basic
            accepts.html { login_required_without_basic }
            # access_denied_with_basic_auth is defined in LoggedExceptionsController
            # get_auth_data returns back the user/password pair
            accepts.rss do
              access_denied_with_basic_auth unless self.current_user = User.authenticate(*get_auth_data)
        alias_method_chain :login_required, :basic

The exact code of course depends on the specific needs of your application.


Jamis Buck  - original exception_notification plugin
Rick Olson  - model/controller code
Josh Goebel - design


Chris Wanstrath - use will_paginate
Henrik Nyh (DanceJam) - catch exceptions in development mode
Something went wrong with that request. Please try again.