Plugsnag
Report errors in your Plug stack or whatever to Bugsnag, because that's a super great place to send your errors.
Installation/Usage
Just throw it in your deps in your mix.exs:
defp deps do
[{:plugsnag, "~> 1.4.0"}]
endThen you'll need to configure it with your API key as per the bugsnag-elixir docs.
To use the plug, use it in your router. For example in an Phoenix app:
defmodule YourApp.Router do
use Phoenix.Router
use Plugsnag
# ...
end
If you want to define your own handle_errors functions using Plug.ErrorHandler, then you can call Plugsnag.handle_errors/{2,3} directly.
defmodule YourApp.Router do
use Phoenix.Router
use Plug.ErrorHandler
# ...
defp handle_errors(conn, assigns) do
Plugsnag.handle_errors(conn, assigns)
# do your own handling
end
endFiltering Parameters and Headers
By default, the BasicErrorReportBuilder will filter out password parameters from error reports sent to Bugsnag. You can customize this list inside your configuration:
config :plugsnag, filter: [params: ~w(password password_confirmation super_sekrit), headers: []]
Customizing error reporting
You can also customize how an error is sent to bugsnag-elixir by passing your
own custom ErrorReportBuilder with the :error_report_builder option.
defmodule YourApp.Router do
use Phoenix.Router
use Plugsnag, error_report_builder: YourApp.ErrorReportBuilder
# ...
enddefmodule YourApp.ErrorReportBuilder do
@behaviour Plugsnag.ErrorReportBuilder
def build_error_report(error_report, conn) do
error_report
|> Plugsnag.BasicErrorReportBuilder.build_error_report(conn)
|> put_user_info(conn)
end
defp put_user_info(error_report, conn) do
current_user = conn.assigns[:current_user]
user_info = %{
id: current_user.id
}
%{error_report | user: user_info}
end
end