lib/new_relic/error_logger.ex

defmodule NewRelic.ErrorLogger do
  @moduledoc """
  Handle error reporting in elixir >= 1.15
  """
  @behaviour :gen_event

  import NewRelic.ConditionalCompile

  def init(opts) do
    after_elixir_version(
      "1.15.0",
      Logger.add_translator({__MODULE__, :translator})
    )

    {:ok, opts}
  end

  def handle_call(_opts, state), do: {:ok, :ok, state}

  def handle_event(_opts, state), do: {:ok, state}

  def handle_info(_opts, state), do: {:ok, state}

  def code_change(_old_vsn, state, _extra), do: {:ok, state}

  def terminate(_reason, _state) do
    after_elixir_version(
      "1.15.0",
      Logger.remove_translator({__MODULE__, :translator})
    )

    :ok
  end

  # Don't log SASL progress reports
  def translator(_level, _message, _timestamp, {{caller, :progress}, _})
      when caller in [:supervisor, :application_controller] do
    :skip
  end

  def translator(_level, _message, _timestamp, _metadata), do: :none
end