lib/log/reset.ex

defmodule Log.Reset do
  @moduledoc """
  Resets configured log files.
  """

  alias __MODULE__.LogPaths.Server
  alias __MODULE__.LogPaths

  @typedoc "Log levels"
  @type levels :: [Logger.level()] | :all | :none

  @doc """
  Returns a map assigning configured log paths to their log levels.

  ## Examples

      iex> alias Log.Reset
      iex> Reset.log_paths() |> is_map()
      true
  """
  @spec log_paths :: LogPaths.t()
  def log_paths, do: GenServer.call(Server, :log_paths)

  @doc """
  Refreshes the map assigning configured log paths to their log levels
  from the application environment.

  ## Examples

      iex> alias Log.Reset
      iex> Reset.refresh_log_paths() |> is_map()
      true
  """
  @spec refresh_log_paths :: LogPaths.t()
  def refresh_log_paths, do: GenServer.call(Server, :refresh)

  @doc """
  Resets the configured log files of the given `levels`.

  ## Examples

      iex> alias Log.Reset
      iex> # Reset ignored if level not configured...
      iex> Reset.reset_logs([:alert, :critical, :warn])
      :ok
  """
  @spec reset_logs(levels) :: :ok
  def reset_logs(levels) do
    GenServer.call(Server, {:reset_logs, levels})
  end
end