Packages
file_only_logger
0.1.49
0.2.70
0.2.69
0.2.65
0.2.64
0.2.63
0.2.62
0.2.61
0.2.60
0.2.59
0.2.58
0.2.57
0.2.56
0.2.55
0.2.54
0.2.53
0.2.52
0.2.51
0.2.50
0.2.49
0.2.48
0.2.47
0.2.45
0.2.44
0.2.43
0.2.42
0.2.41
0.2.40
0.2.39
0.2.38
0.2.37
0.2.36
0.2.35
0.2.34
0.2.33
0.2.31
0.2.30
0.2.29
0.2.28
0.2.27
0.2.26
0.2.25
0.2.24
0.2.23
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.1.58
0.1.57
0.1.55
0.1.54
0.1.53
0.1.52
0.1.51
0.1.50
0.1.49
0.1.47
0.1.46
0.1.45
0.1.44
0.1.43
0.1.42
0.1.41
0.1.40
0.1.39
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
0.1.31
0.1.30
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.0
A simple logger that writes messages to log files only (not to the console).
Current section
Files
Jump to
Current section
Files
lib/file/only/logger/proxy/try.ex
defmodule File.Only.Logger.Proxy.Try do
@moduledoc """
Removes or adds the console backend. Keeps trying in case of failures.
"""
use PersistConfig
alias File.Only.Logger.Log
@after_compile get_env(:after_compile)
@flush true
@times 7
@wait 10
@doc """
Removes the console backend. If it fails, will retry up to #{@times} times.
"""
@dialyzer {:no_match, remove_console_backend: 0}
@spec remove_console_backend :: :ok | {:error, atom}
def remove_console_backend do
case Logger.remove_backend(:console, flush: @flush) do
:ok ->
:ok
{:error, :not_found} ->
:ok
# Can never match per Dialyzer. But just in case...
{:error, reason} ->
:ok = Log.warn(:unremoved, {@wait, @times, reason, __ENV__})
remove_console_backend(@times)
end
end
@doc """
Adds the console backend. If it fails, will retry up to #{@times} times.
"""
@spec add_console_backend :: :ok | {:error, atom}
def add_console_backend do
case Logger.add_backend(:console, flush: @flush) do
{:ok, _pid} ->
:ok
{:error, :already_present} ->
:ok
{:error, reason} ->
:ok = Log.warn(:unadded, {@wait, @times, reason, __ENV__})
add_console_backend(@times)
end
end
## Private functions
@dialyzer {:no_unused, remove_console_backend: 1}
@spec remove_console_backend(non_neg_integer) :: :ok | {:error, atom}
defp remove_console_backend(0) do
:ok = Log.warn(:remains_unremoved, {@wait, @times, __ENV__})
{:error, :console_unremoved}
end
defp remove_console_backend(times_left) do
Process.sleep(@wait)
times_left = times_left - 1
case Logger.remove_backend(:console, flush: @flush) do
:ok ->
:ok = Log.warn(:now_removed, {@wait, @times - times_left, __ENV__})
{:error, reason} ->
:ok = Log.warn(:still_unremoved, {@wait, times_left, reason, __ENV__})
remove_console_backend(times_left)
end
end
@spec add_console_backend(non_neg_integer) :: :ok | {:error, atom}
defp add_console_backend(0) do
:ok = Log.warn(:remains_unadded, {@wait, @times, __ENV__})
{:error, :console_unadded}
end
defp add_console_backend(times_left) do
Process.sleep(@wait)
times_left = times_left - 1
case Logger.add_backend(:console, flush: @flush) do
{:ok, _pid} ->
:ok = Log.warn(:now_added, {@wait, @times - times_left, __ENV__})
{:error, reason} ->
:ok = Log.warn(:still_unadded, {@wait, times_left, reason, __ENV__})
add_console_backend(times_left)
end
end
end