Packages
sentry
1.1.1
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/logger.ex
defmodule Sentry.Logger do
require Logger
@moduledoc """
Use this if you'd like to capture all Error messages that the Plug handler might not. Simply set `use_error_logger` to true.
This is based on the Erlang [error_logger](http://erlang.org/doc/man/error_logger.html).
```elixir
config :sentry,
use_error_logger: true
```
"""
use GenEvent
def init(_mod, []), do: {:ok, []}
def handle_call({:configure, new_keys}, _state) do
{:ok, :ok, new_keys}
end
def handle_event({_level, gl, _event}, state) when node(gl) != node() do
{:ok, state}
end
def handle_event({:error_report, _gl, {_pid, _type, [message | _]}}, state) when is_list(message) do
try do
error_info = message[:error_info]
context = get_in(message, [:dictionary, :sentry_context]) || %{}
opts = context
|> Map.take(Sentry.Context.context_keys)
|> Map.to_list()
case error_info do
{_kind, {exception, stacktrace}, _stack} when is_list(stacktrace) ->
opts = Keyword.put(opts, :stacktrace, stacktrace)
Sentry.capture_exception(exception, opts)
{_kind, exception, stacktrace} ->
opts = Keyword.put(opts, :stacktrace, stacktrace)
Sentry.capture_exception(exception, opts)
end
rescue
ex ->
error_type = strip_elixir_prefix(ex.__struct__)
reason = Exception.message(ex)
message = "Unable to notify Sentry! #{error_type}: #{reason}"
Logger.warn(message)
end
{:ok, state}
end
def handle_event({_level, _gl, _event}, state) do
{:ok, state}
end
@doc """
Internally all modules are prefixed with Elixir. This function removes the
Elixir prefix from the module when it is converted to a string.
"""
def strip_elixir_prefix(module) do
module
|> Atom.to_string
|> String.split(".")
|> tl
|> Enum.join(".")
end
end