Current section
Files
Jump to
Current section
Files
lib/logger.ex
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