Current section

Files

Jump to
logger_sentry lib backends sentry.ex
Raw

lib/backends/sentry.ex

defmodule Logger.Backends.Sentry do
@moduledoc """
This module is the sentry backend for Logger and use LoggerBackends behaviour.
It defines all callbacks of `LoggerBackends` behaviour:
* init/1
* log_event/3
the function `init/1` will initital configure for the sentry backend, and
function `log_event/3` will send the output to sentry server depends on
the configure information of `sentry` application.
"""
use LoggerBackends
def init(_) do
config = Application.get_env(:logger, :sentry, [])
{:ok, init(config, %__MODULE__{})}
end
if Mix.env() in [:test] do
def log_event(level, output, state) do
case :ets.info(:__just_prepare_for_logger_sentry__) do
:undefined ->
:ignore
_ ->
:ets.insert(:__just_prepare_for_logger_sentry__, {level, output})
end
state
end
else
def log_event(_level, output, state) do
Sentry.capture_exception(output, [stacktrace: :erlang.get_stacktrace(),
event_source: __MODULE__])
state
end
end
defp init(config, state) do
level = Keyword.get(config, :level, :info)
format = Logger.Formatter.compile Keyword.get(config, :format)
metadata = Keyword.get(config, :metadata, []) |> configure_metadata()
%{state | format: format, metadata: metadata, level: level}
end
defp configure_metadata(:all), do: :all
defp configure_metadata(metadata), do: Enum.reverse(metadata)
end