View Source Sentry.LoggerHandler (Sentry v9.1.0)
:logger handler to report logged events to Sentry.
This module is similar to Sentry.LoggerBackend, but it implements a
:logger handler rather
than an Elixir's Logger backend.
This module is available since v9.0.0 of this library.
When to Use the Handler vs the Backend?
There is no functional difference in behavior between
Sentry.LoggerHandlerandSentry.LoggerBackendwhen it comes to reporting to Sentry. The main functional difference is thatSentry.LoggerBackendruns in its own process, whileSentry.LoggerHandlerruns in the process that logs. The latter is generally preferable.The reason both exist is that
:loggerhandlers are a relatively-new feature in Erlang/OTP, andSentry.LoggerBackendwas created before:loggerhandlers were introduced.In general, try to use
Sentry.LoggerHandlerif possible. In future Elixir releases,Loggerbackends may become deprecated and henceSentry.LoggerBackendmay be eventually removed.
crash-reports
Crash Reports
The reason you'll want to add this handler to your application is so that you can
report crashes in your system to Sentry. Sometimes, you're able to catch exceptions
and handle them (such as reporting them to Sentry), which is what you can do with
Sentry.PlugCapture for example.
However, Erlang/OTP systems are made of processes running concurrently, and
sometimes those processes crash and exit. If you're not explicitly catching
exceptions in those processes to report them to Sentry, then you won't see those
crash reports in Sentry. That's where this handler comes in. This handler hooks
into :logger and reports nicely-formatted crash reports to Sentry.
usage
Usage
To add this handler to your system, see the documentation for handlers in Elixir.
You can configure this handler in the :logger key under your application's configuration,
potentially alongside other :logger handlers:
config :my_app, :logger, [
{:handler, :my_sentry_handler, Sentry.LoggerHandler, %{
config: %{metadata: [:file, :line]}
}}
]If you do this, then you'll want to add this to your application's Application.start/2
callback, similarly to what you would do with Sentry.LoggerBackend and the
call to Logger.add_backend/1:
def start(_type, _args) do
Logger.add_handlers(:my_app)
# ...
endAlternatively, you can skip the :logger configuration and add the handler directly
to your application's Application.start/2 callback:
def start(_type, _args) do
:logger.add_handler(:my_sentry_handler, Sentry.LoggerHandler, %{
config: %{metadata: [:file, :line]}
})
# ...
end
configuration
Configuration
This handler supports the following configuration options:
:excluded_domains(list ofatom/0) - any messages with a domain in the configured list will not be sent. Defaults to[:cowboy]to avoid double-reporting events fromSentry.PlugCapture.:metadata(list ofatom/0, or:all) - use this to include non-Sentry logger metadata in reports. If it's a list of keys, metadata in those keys will be added in the:extracontext (seeSentry.Context.set_extra_context/1) under the:logger_metadatakey. If set to:all, all metadata will be included. Defaults to[].:level(Logger.level/0) - the minimumLoggerlevel to send events for. Defaults to:error.:capture_log_messages(boolean/0) - whentrue, this module will report all logged messages to Sentry (provided they're not filtered by:excluded_domainsand:level). Defaults tofalse, which will only send crash reports, which are messages with metadata that has the shape of an exit reason and a stacktrace.