Packages
sentry
10.3.0
13.3.0
13.2.0
13.1.0
13.0.1
13.0.0
12.0.3
12.0.2
12.0.1
12.0.0
11.0.4
11.0.3
11.0.2
11.0.1
11.0.0
10.10.0
10.9.0
10.8.1
10.8.0
10.7.1
10.7.0
10.6.2
10.6.1
10.6.0
10.5.0
10.4.0
10.3.0
10.2.1
10.2.0
10.2.0-rc.2
10.2.0-rc.1
10.1.0
10.0.3
10.0.2
10.0.1
10.0.0
9.1.0
9.0.0
8.1.0
8.0.6
8.0.5
8.0.4
8.0.3
8.0.2
8.0.1
8.0.0
8.0.0-rc.2
8.0.0-rc.1
8.0.0-rc.0
retired
7.2.5
7.2.4
7.2.3
7.2.2
7.2.1
7.2.0
7.1.0
7.0.6
7.0.5
7.0.4
7.0.3
7.0.2
7.0.1
7.0.0
6.4.2
6.4.1
6.4.0
6.3.0
6.2.1
6.2.0
6.1.0
6.0.5
6.0.4
6.0.3
6.0.2
6.0.1
6.0.0
5.0.1
5.0.0
4.0.3
4.0.2
4.0.1
4.0.0
3.0.0
2.2.0
2.1.0
2.0.2
2.0.1
2.0.0
1.1.2
1.1.1
1.1.0
1.0.0
0.3.2
0.3.1
0.3.0
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
The Official Elixir client for Sentry
Current section
Files
Jump to
Current section
Files
lib/sentry/event_filter.ex
defmodule Sentry.EventFilter do
@moduledoc """
A behaviour for filtering events to send to Sentry.
There's only one callback to implement, `c:exclude_exception?/2`.
> #### Soft-deprecated {: .warning}
>
> This behaviour is soft-deprecated in favor of filtering events through the
> `:before_send` callback functionality. `:before_send` is described in
> details in the documentation for the `Sentry` module. 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_send` callback.
>
> 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.SentryEventFilter
The 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
end
Alternatively, 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
end
If 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
if 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
end
Then, we can configure the `:before_send` callback.
config :sentry,
before_send: {MyApp.SentryEventFilter, :filter_non_500}
> #### Multiple Callbacks {: .tip}
>
> You can only have one `:before_send` callback. 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_send` callback, create a function
> that does all the things you need and register *that* as the callback.
"""
@doc """
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`.
"""
@callback exclude_exception?(exception :: Exception.t(), source :: atom) :: boolean
end