defmodule LoggerTelegramBackend.Formatter do @moduledoc false def format_event(message, level, metadata) do """ [#{level}] #{format_message(message)}
#{format_metadata(metadata)}
""" end defp format_message(message) do message |> to_string |> String.trim() |> escape_special_chars() |> highlight_title() end defp escape_special_chars(message) do special_chars = [ {"&", "&"}, {"<", "<"}, {">", ">"} ] Enum.reduce(special_chars, message, fn {c, r}, acc -> String.replace(acc, c, r) end) end defp highlight_title(message) do message |> String.split("\n") |> do_highlight_title() |> Enum.join("\n") end defp do_highlight_title([title]), do: ["#{title}"] defp do_highlight_title([title | rest]), do: ["#{title}"] ++ rest defp format_metadata(metadata) do metadata |> Enum.map(fn {k, v} -> "#{k |> to_string() |> String.capitalize()}: #{inspect(v)}" end) |> Enum.join("\n") end end