defmodule Reblog.Logger do @moduledoc """ A custom Logger format for Reblog. """ def format(level, message, _timestamp, metadata) do {ns_prefix, l_prefix, reset_code} = case Keyword.get(metadata, :color, nil) do false -> {"", "", ""} _ -> {get_color_for(:namespace), get_color_for(:level, level), IO.ANSI.reset()} end [ "[", ns_prefix, get_namespace(metadata), reset_code, l_prefix, get_level_info(level, metadata), reset_code, "] ", "#{message}", "\n" ] |> IO.ANSI.format() rescue e -> "could not format: #{inspect(e)} #{inspect({level, message, metadata})}" end defp get_namespace(metadata) do case Keyword.get(metadata, :namespace, nil) do nil -> "" _ -> "#{metadata[:namespace]} " end end defp get_color_for(:namespace), do: IO.ANSI.light_magenta() defp get_color_for(:level, :debug), do: IO.ANSI.light_white() defp get_color_for(:level, :info), do: IO.ANSI.light_green() defp get_color_for(:level, :warn), do: IO.ANSI.yellow() defp get_color_for(:level, :error), do: IO.ANSI.red() defp get_level_info(:error, metadata), do: "error@#{metadata[:module]}:#{metadata[:line]}" defp get_level_info(level, _), do: "#{level}" end