Logs & Process Crashes

Learn more about how to configure the SDK. These options are set when the SDK is first initialized, passed to the init function as an object.

Elixir and Erlang automatically log process crashes. To capture these errors in Sentry, you'll want to enable the Elixir SDK's built-in :logger handler. The most common way to do this is by adding the handler in your application's configuration, and then calling Logger.add_handlers/1 in the Application.start/2 callback of your application.

First, add the Sentry handler to your application's configuration. (You can use any handler identifier instead of :my_sentry_handler. ):

config/prod.exs
Copied
config :my_app, :logger, [
  {:handler, :my_sentry_handler, Sentry.LoggerHandler, %{
    config: %{
      metadata: [:file, :line],
      rate_limiting: [max_events: 10, interval: _1_second = 1_000],
      capture_log_messages: true
    }
  }}
]

Next, add the handler to the logger in your application's Application.start/2 callback:

my_app/lib/application.ex
Copied
@impl Application
def start(_type, _args) do
  children = [
    # ...
  ]

  Logger.add_handlers(:my_app)
end

If you also want to capture logged messages above a specific log level (and not just process crashes), you'll need to set :capture_log_messages. Then you can use the :level option in the handler configuration:

config/prod.exs
Copied
config :my_app, :logger, [
  {:handler, :my_sentry_handler, Sentry.LoggerHandler, %{
    config: %{capture_log_messages: true, level: :error}
  }}
]

Now messages will be reported to Sentry even if logged with Logger.error/1, for example:

Copied
Logger.error("This will be reported to Sentry")

You can configure the :logger handler under the :config key, as shown above. The configuration options are shown below.

capture_log_messages

This is set to false by default and will only send crash reports (which are messages with metadata that look like an exit reason and a stacktrace). When set to true, the handler will report all logged messages to Sentry (provided they're not filtered by :excluded_domains and :level).

level

This is the minimum Logger level to send events for and is set to :error by default. You can lower it to :warning, for example, to also report Logger.warning/1 calls.

metadata

Use this to include non-Sentry logger metadata in reports. It's set to to [] by default. If it's a list of keys, metadata in those keys will be added in the :extra context under the :logger_metadata key. If it's set to :all, all metadata will be included.

excluded_domains

This configuration option makes it so that messages with a domain in the configured list will not be sent. It's set to [:cowboy] by default to avoid double-reporting events from Sentry.PlugCapture.

rate_limiting

This configures rate-limiting for reported logged messages to Sentry and is disabled by default. It can help limit the number of messages being reported in a short period of time.

Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").