defmodule File.Only.Logger.App do
use Application
@spec start(Application.start_type(), term) :: {:ok, pid}
def start(_start_type, :ok = _start_args) do
# dbg_handler_config("Before preventing console messages...", __ENV__)
# Prevent console messages...
:ok = :logger.set_handler_config(:default, :level, :none)
# dbg_handler_config("After preventing console messages...", __ENV__)
# Add debug, info, warning and error handlers...
case Logger.add_handlers(:file_only_logger) do
:ok ->
# Allow console messages...
:ok = :logger.set_handler_config(:default, :level, Logger.level())
# dbg_handler_config("After allowing console messages...", __ENV__)
{:ok, self()}
# Likely due to compile time configuration in map_sorter...
# Will log error message ==> Invalid logger handler config:
# {:file_only_logger, {:already_exist, :debug_handler}}
{:error,
{:bad_config, {:handler, {:file_only_logger, {:already_exist, _id}}}}} ->
# Allow console messages...
:ok = :logger.set_handler_config(:default, :level, Logger.level())
# dbg_handler_config("After allowing console messages...", __ENV__)
{:ok, self()}
end
end
## Private functions
# defp get_handler_config(id, color) do
# case :logger.get_handler_config(id) do
# {:ok, %{config: %{type: :file, file: file}, level: _level}} ->
# file
# {:ok,
# %{
# config: %{type: :standard_io},
# level: level,
# formatter: {Logger.Formatter, %Logger.Formatter{colors: colors}}
# }} ->
# {id, level, colors[color]}
# {:error, {:not_found, ^id} = error} ->
# error
# end
# end
# @sep "==========================================================="
# @cyan "\e[36m"
# @light_cyan "\e[96m"
# @reset "\e[0m"
# defp dbg_handler_config(msg, env) do
# """
# #{@cyan}#{@sep}
# #{@light_cyan}#{msg}
# #{inspect(env.module)}.#{inspect(env.function)}:#{env.line}
# #{get_handler_config(:debug_handler, :debug) |> inspect()}
# #{get_handler_config(:default, :debug) |> inspect()}
# #{@cyan}#{@sep}#{@reset}
# """
# |> IO.puts()
# end
end