@type format() :: :json | :logfmt | :plaintext
@type log_level() :: :debug | :info | :notice | :warning | :error | :critical | :alert | :emergency
@spec alert(String.t(), String.t(), %{} | format()) :: :ok
@spec critical(String.t(), String.t(), %{} | format()) :: :ok
@spec debug(String.t(), String.t(), %{} | format()) :: :ok
@spec emergency(String.t(), String.t(), %{} | format()) :: :ok
@spec error(String.t(), String.t(), %{} | format()) :: :ok
@spec info(String.t(), String.t(), %{} | format()) :: :ok
@spec log(log_level(), String.t(), String.t(), %{}, format()) :: :ok
@spec notice(String.t(), String.t(), %{} | format()) :: :ok
@spec warning(String.t(), String.t(), %{} | format()) :: :ok