Custom notifiers

To create a custom notifier, you need to implement the BoomNotifier.Notifier behaviour:

@callback notify(%ErrorInfo{}, keyword(String.t())) :: no_return()

ErrorInfo is a struct that contains the following attributes:

  • name: the error name.
  • reason: the error reason.
  • stack: the error stacktrace.
  • controller: the controller where the exception occurred.
  • action: the action in the controller that failed.
  • request: the request information that caused the exception.
  • timestamp: the UTC time when the exception happened.
  • metatadata: assigns and logger metadata.
  • occurrences: aggregated information about the errors that are being grouped.
    • accumulated_occurrences: how many times an exception occurred before the notification was sent.
    • first_occurrence: collects the time when the first exception was raised.
    • last_occurrence: collects the time when the last exception was raised.

Then you can use that information in your notify/2 implementation.

defmodule CustomNotifier do
  @behaviour BoomNotifier.Notifier

  @impl BoomNotifier.Notifier
  def notify(error, options) do
    # ...
    # ...
    # ...
  end
defmodule YourApp.Router do
  use Phoenix.Router

  use BoomNotifier,
    notifier: CustomNotifier,
    options: [
      # ...
    ]

You can also implement an optional callback validate_config that receives the options keyword list set in the notifier so the user can be warned during compilation if the attributes are not correct.

@callback validate_config(keyword(String.t())) :: :ok | {:error, String.t()}