Add Bugsnag to your Rack based projects.
Add the bugsnag
gem to your Gemfile
:
bundle add bugsnag
To identify your app in the Bugsnag dashboard, you’ll need to configure your Bugsnag API key. You can find your API key when creating a project in your Bugsnag dashboard, or later from your project settings page.
To set your API key in your Rack app, add the following code to your config.ru
file:
require 'bugsnag'
Bugsnag.configure do |config|
config.api_key = 'YOUR_API_KEY_HERE'
end
Alternatively, you can set the BUGSNAG_API_KEY
environment variable.
You can find your API key in Project Settings.
If you’d like to configure Bugsnag further, check out the configuration options reference.
To automatically capture unhandled exceptions, you’ll need to enable the Bugsnag Rack middleware:
use Bugsnag::Rack
At this point, Bugsnag should be installed and configured, and any unhandled exceptions will be automatically detected and should appear in your Bugsnag dashboard.
Reporting handled exceptions can be accomplished as follows:
begin
raise 'Something went wrong!'
rescue => exception
Bugsnag.notify(exception)
end
It can often be helpful to adjust the severity or attach custom diagnostics to handled exceptions. For more information, see reporting handled errors.
Sometimes after catching and notifying a handled exception you may want to re-raise the exception to be dealt with by your standard error handlers without sending an automatic exception to Bugsnag.
This can be accomplished by calling Bugsnag.notify()
, adding a custom skip_bugsnag
property to your exception, and then re-raising the exception:
begin
raise 'Something went wrong!'
rescue => exception
Bugsnag.notify(exception)
exception.instance_eval { def skip_bugsnag; true; end }
# Now this won't be sent a second time by the exception handlers
raise exception
end
As well as a full stacktrace for every exception, Bugsnag will automatically capture the following diagnostic data:
In order to quickly reproduce and fix errors, it is often helpful to send additional application-specific diagnostic data to Bugsnag. This can be accomplished using an add_on_error
callback as follows:
Bugsnag.configure do |config|
config.add_on_error(proc do |report|
report.add_tab(:diagnostics, {
product: current_product.name
})
end)
end
For more information, see the customizing error reports reference.
In order to correlate errors with customer reports, or to see a list of users who experienced each error, it is helpful to capture and display user information on your Bugsnag dashboard.
You can set this information using an add_on_error
callback as follows:
Bugsnag.configure do |config|
config.add_on_error(proc do |report|
report.user = {
id: current_user.id,
email: current_user.email,
name: current_user.name
}
end)
end
For more information, see reporting handled errors.
Bugsnag tracks the number of “sessions” that happen within your application. This allows you to compare stability scores between releases and helps you to understand the quality of your releases.
Sessions are captured and reported by default. This behavior can be disabled using the auto_capture_sessions
configuration option.
When enabled, sessions are automatically captured whenever a request is made to the Rack server.
To control what is deemed a session, disable automatic session capturing as detailed above, then call Bugsnag.start_session
when appropriate for your application.
In order to understand what happened in your application before each error, it can be helpful to leave short log statements that we call breadcrumbs. By default, the last 25 breadcrumbs are attached to an error report to help diagnose what events lead to the error. Captured breadcrumbs are shown on your Bugsnag dashboard as a part of the error report.
By default, Bugsnag captures common events including:
A full breakdown of automatically captured events can be found here.
You can prevent the capture of certain automatically captured breadcrumbs by removing the type from the enabled_automatic_breadcrumb_types
configuration array.
Leaving a breadcrumb is accomplished using the leave_breadcrumb
method:
Bugsnag.leave_breadcrumb "Something happened!"
When logging breadcrumbs, we’ll keep track of the timestamp, and show both the message and timestamp on your dashboard.
Additional data can optionally be attached to breadcrumbs:
meta_data = {
:userId => get_current_user.id,
:authLevel => get_current_user.get_level
}
Bugsnag.leave_breadcrumb("User logged in", meta_data, Bugsnag::Breadcrumbs::USER_BREADCRUMB_TYPE)
All meta data must be of the Numeric
, String
, TrueClass
, or FalseClass
types, or nil
.
Both automatically and manually created breadcrumbs can be filtered to remove sensitive data, or be ignored completely.
Callbacks can be registered by adding them to the before_breadcrumb_callbacks
array in the configuration.
This callback will have access to each breadcrumb, and can modify it or prevent collection using the methods described in the breadcrumb object:
config.before_breadcrumb_callbacks << Proc.new do |breadcrumb|
# Ignores all breadcrumbs of a certain type
breadcrumb.ignore! if breadcrumb.type == Bugsnag::Breadcrumbs::PROCESS_BREADCRUMB_TYPE
# Removes any collected breadcrumb meta data
breadcrumb.meta_data = {}
end
Similarly to the report meta data, the breadcrumb’s meta data will be filtered based on the meta_data_filters
before delivery.
By sending your application version to us when you release a new version of your app, you’ll be able to see which release each error was introduced or seen in.
Ensure you’ve set your app version within the application:
Bugsnag.configure do |config|
config.app_version = '1.3.0'
end
Set up a build tool integration to enable linking to code in your source control provider from the releases dashboard, timeline annotations, and stack traces.
If you use Capistrano to release your apps, check out the Capistrano release tracking guide
Use the Heroku deployment hooks guide to register a deployment hook to your Heroku application
Catch and report errors in your client-side JavaScript with the Web browser JavaScript guide