View Source Sentry.EventFilter behaviour (Sentry v11.0.4)
A behaviour for filtering events to send to Sentry.
There's only one callback to implement, exclude_exception?/2.
Soft-deprecated
This behaviour is soft-deprecated in favor of filtering events through the
:before_sendcallback functionality.:before_sendis described in details in the documentation for theSentrymodule. It's a more general mechanism to filter or modify events before sending them to Sentry. See below for an example of how to replace an event filter with a:before_sendcallback.In future major versions of this library, we might hard-deprecate or remove this behaviour altogether.
Usage
To use a custom event filter module, configure the :filter option
in the :sentry application. For example:
config :sentry,
filter: MyApp.SentryEventFilterThe default event filter is Sentry.DefaultEventFilter.
Examples
As an example, if you wanted to exclude all ArithmeticError exceptions
and nothing else:
defmodule MyApp.SentryEventFilter do
@behaviour Sentry.EventFilter
@impl true
def exclude_exception?(%ArithmeticError{}, _source), do: true
def exclude_exception?(_exception, _source), do: false
endAlternatively, if you wanted to skip all non-500 exceptions in a Plug app:
defmodule MyApp.SentryEventFilter do
@behaviour Sentry.EventFilter
@impl true
def exclude_exception?(exception, _source) do
Plug.Exception.status(exception) < 500
end
endIf you want to exclude some specific exceptions but then fall back to the default event filter, you can do something like this:
defmodule MyApp.SentryEventFilter do
@behaviour Sentry.EventFilter
@impl true
def exclude_exception?(%ArithmeticError{}, _source) do
true
end
def exclude_exception?(exception, source) do
Sentry.DefaultEventFilter.exclude_exception?(exception, source)
end
end
Replacing With :before_send
Let's look at an example of how to filter non-500 exceptions in a Plug app through
the :before_send callback. We can start with a module:
defmodule MyApp.SentryEventFilter do
def filter_non_500(%Sentry.Event{original_exception: exception} = event) do
cond do
Plug.Exception.status(exception) < 500 ->
false
# Fall back to the default event filter.
Sentry.DefaultEventFilter.exclude_exception?(exception, event.source) ->
false
true ->
event
end
end
endThen, we can configure the :before_send callback.
config :sentry,
before_send: {MyApp.SentryEventFilter, :filter_non_500}Multiple Callbacks
You can only have one
:before_sendcallback. If you change the value of this configuration option, you'll override the previous callback. If you want to do multiple things in a:before_sendcallback, create a function that does all the things you need and register that as the callback.
Summary
Callbacks
Should return whether the given event should be excluded from being reported to Sentry.
Callbacks
@callback exclude_exception?(exception :: Exception.t(), source :: atom()) :: boolean()
Should return whether the given event should be excluded from being reported to Sentry.
exception is the exception that was raised.
source is the source of the event. Events from Sentry.PlugCapture
will have :plug as a source and events from Sentry.LoggerBackend
will have :logger as the source. A custom source can also be specified
by passing the :event_source option to Sentry.capture_exception/2.