Current section

Files

Jump to
logger_datadog_backend lib logger_datadog_backend.ex
Raw

lib/logger_datadog_backend.ex

defmodule LoggerDatadogBackend do
@moduledoc """
implementation for ExLogger backend
"""
use GenEvent
defstruct [level: nil, enabled: false]
@doc """
initialization
"""
def init(__MODULE__) do
config = Application.get_env(:logger, __MODULE__)
enabled = case Code.ensure_loaded(ExStatsD) do
{:module, _} -> true
_ -> false
end
{:ok, init(config, %__MODULE__{enabled: enabled})}
end
@doc """
logger event handling
"""
def handle_event({level, _group_leader, {Logger, _message, _timestamp, _metadata}}, state) do
%{level: log_level, enabled: enabled} = state
cond do
not meet_level?(level, log_level) -> {:ok, state}
not enabled -> {:ok, state}
:otherwise -> {:ok, log_event(level, state)}
end
end
defp init(config, state) do
level = Keyword.get(config, :level)
%{state | level: level}
end
defp meet_level?(_lvl, nil), do: true
defp meet_level?(lvl, min) do
Logger.compare_levels(lvl, min) != :lt
end
defp log_event(level, state) do
ExStatsD.increment("logger.#{level}")
state
end
end