lib/logfmt_ex.ex

import Kernel, except: [inspect: 2]

defmodule LogfmtEx do
  @moduledoc ~S"""
  GenServer for persistent opts
  """

  use GenServer

  alias LogfmtEx.Formatter

  def start_link(opts \\ []) do
    GenServer.start_link(__MODULE__, opts, name: __MODULE__)
  end

  @impl true
  def init(opts) do
    {:ok, opts}
  end

  @impl true
  def handle_call({:format, level, message, {date, time}, metadata}, _from, opts) do
    formatted_log = Formatter.format(level, message, {date, time}, metadata, opts)
    {:reply, formatted_log, opts}
  end

  @spec format(Logger.level(), any(), Logger.Formatter.time(), Keyword.t()) :: iodata()
  def format(level, message, {date, time}, metadata) do
    GenServer.call(__MODULE__, {:format, level, message, {date, time}, metadata})
  end
end