lib/appsignal/logger/handler.ex

defmodule Appsignal.Logger.Handler do
  def log(
        %{
          meta: metadata,
          level: level
        } = event,
        %{
          config: %{
            group: group,
            format: format
          },
          formatter: {formatter, formatter_config}
        }
      ) do
    Appsignal.Logger.log(
      level,
      group,
      IO.chardata_to_string(formatter.format(event, formatter_config)),
      Enum.into(metadata, %{}),
      format
    )
  end

  def add(group, format \\ :plaintext) do
    :logger.add_handler(:appsignal_log, __MODULE__, %{
      config: %{
        group: group,
        format: format
      },
      formatter:
        Logger.Formatter.new(
          format: "$message",
          colors: [enabled: false]
        )
    })
  end

  def remove, do: :logger.remove_handler(:appsignal_log)
end