Elixir Plug, Logger and client for the ⚡ Honeybadger error notifier.
Watch our screencast by Josh Adams of ElixirSips!
Add the Honeybadger package to deps/0
and application/0
in your
application's mix.exs
file and run mix do deps.get, deps.compile
defp application do
[applications: [:honeybadger, :logger]]
end
defp deps do
[{:honeybadger, "~> 0.1"}]
end
By default the environment variable HONEYBADGER_API_KEY
will be used to find your API key to the Honeybadger API. If you would like to specify your key or any other configuration options a different way, you can do so in config.exs
:
config :honeybadger,
api_key: "sup3rs3cr3tk3y"
The Honeybadger package can be used as a Plug alongside your Phoenix applications, as a logger backend, or as a standalone client for sprinkling in exception notifications where they are needed.
The Honeybadger Plug adds a
Plug.ErrorHandler
to your pipeline. Simply use
the Honeybadger.Plug
module inside of a Plug
or Phoenix.Router and any crashes will be automatically reported to
Honeybadger. It's best to use Honeybadger.Plug
after the Router plugs so that
exceptions due to non-matching routes are not reported to Honeybadger.
defmodule MyPlugApp do
use Plug.Router
use Honeybadger.Plug
[... the rest of your plug ...]
end
defmodule MyPhoenixApp.Router do
use Crywolf.Web, :router
use Honeybadger.Plug
pipeline :browser do
[...]
end
end
Just set the use_logger
option to true
in your application's config.exs
and you're good to go! Any
SASL compliant
processes that crash will send an error report to the Honeybadger.Logger
.
After the error reaches the logger we take care of notifying Honeybadger for
you!
You can manually report rescued exceptions with the Honeybadger.notify
macro.
try do
File.read! "this_file_really_should_exist_dang_it.txt"
rescue
exception ->
require Honeybadger
Honeybadger.notify(exception)
end
If you'd like to see the module in action before you integrate it with your apps, check out our sample Phoenix application.
You can deploy the sample app to your Heroku account by clicking this button:
Don't forget to destroy the Heroku app after you're done so that you aren't charged for usage.
The code for the sample app is available on Github, in case you'd like to read through it, or run it locally.
You can set configuration options in config.exs
. It looks like this:
config :honeybadger,
api_key: "sup3rs3cr3tk3y"
Here are all of the options you can pass in the keyword list:
Name | Description | Default |
---|---|---|
api_key | Your application's Honeybadger API key | System.get_env("HONEYBADGER_API_KEY"))` |
app | Name of your app's OTP Application as an atom | Mix.Project.config[:app] |
use_logger | Enable the Honeybadger Logger for handling errors outside of web requests | true |
exclude_envs | Environments that you want to disable Honeybadger notifications | [:dev, :test] |
hostname | Hostname of the system your application is running on | :inet.gethostname |
origin | URL for the Honeybadger API | "https://api.honeybadger.io" |
project_root | Directory root for where your application is running | System.cwd |
Use the Honeybadger.notify/2
macro to send exception information to the
collector API. The first parameter is the exception and the second parameter
is the context/metadata. There is also a Honeybadger.notify/1
which doesn't require the second parameter.
try do
File.read! "this_file_really_should_exist_dang_it.txt"
rescue
exception ->
require Honeybadger
context = %{user_id: 5, account_name: "Foo"}
Honeybadger.notify(exception, context)
end
Honeybadger.context/1
is provided for adding extra data to the notification that gets sent to Honeybadger. You can make use of this in places such as a Plug in your Phoenix Router or Controller to ensure useful debugging data is sent along.
def MyPhoenixApp.Controller
use MyPhoenixApp.Web, :controller
plug :set_honeybadger_context
def set_honeybadger_context(conn, _opts) do
user = get_user(conn)
Honeybadger.context(user_id: user.id, account: user.account.name)
conn
end
end
See https://github.com/honeybadger-io/honeybadger-elixir/releases
If you're adding a new feature, please submit an issue as a preliminary step; that way you can be (moderately) sure that your pull request will be accepted.
- Fork it.
- Create a topic branch
git checkout -b my_branch
- Commit your changes
git commit -am "Boom"
- Push to your branch
git push origin my_branch
- Send a pull request
This library is MIT licensed. See the LICENSE file in this repository for details.