Packages
log_reset
0.1.46
0.1.70
0.1.69
0.1.68
0.1.67
0.1.66
0.1.65
0.1.64
0.1.63
0.1.62
0.1.61
0.1.60
0.1.59
0.1.58
0.1.57
0.1.56
0.1.55
0.1.54
0.1.53
0.1.52
0.1.51
0.1.50
0.1.49
0.1.48
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.29
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.2
0.1.1
0.1.0
Resets configured log files.
Current section
Files
Jump to
Current section
Files
lib/log/reset/log_paths.ex
defmodule Log.Reset.LogPaths do
@moduledoc """
A map of configured log paths and functions.
"""
# Must be in that order given the common 'Log' part...
alias Log.Reset
alias Log.Reset.Log
@typedoc "A map assigning configured log paths to their log levels"
@type t :: %{Logger.level() => Path.t()}
@doc """
Resets the configured log files of the given `levels`.
"""
@spec reset_logs(t, Reset.levels()) :: :ok
def reset_logs(log_paths, :all) do
log_paths |> Map.values() |> reset_logs()
end
def reset_logs(_log_paths, :none), do: :ok
def reset_logs(log_paths, levels) when is_list(levels) do
for {level, log_path} <- log_paths, level in levels do
log_path
end
|> reset_logs()
end
def reset_logs(_log_paths, _), do: :ok
@doc """
Creates a map assigning each configured log path to its log level.
"""
@spec new :: t
def new do
for config <- log_configs(), into: %{} do
{config[:level], config[:path]}
end
end
## Private functions
@spec reset_logs([Path.t()]) :: :ok
defp reset_logs(log_paths) do
log_paths
# Delete log files first...
|> Enum.map(&Task.async(fn -> reset_log(&1) end))
|> Enum.map(&Task.await/1)
# Process results second...
|> log_results()
end
@spec log_results([tuple]) :: :ok
defp log_results(results) do
Enum.reduce(results, :ok, fn
{:ok, log_path}, _acc ->
:ok = Log.info(:log_reset, {log_path, __ENV__})
{:error, reason, log_path}, _acc ->
:ok = Log.error(:log_not_reset, {log_path, reason, __ENV__})
end)
end
@spec reset_log(Path.t()) :: tuple
defp reset_log(log_path) do
log_path = Path.expand(log_path)
case File.rm(log_path) do
:ok -> {:ok, log_path}
{:error, :enoent} -> {:ok, log_path}
{:error, reason} -> {:error, reason, log_path}
end
end
@spec log_configs :: [Keyword.t()]
defp log_configs do
:application.get_env(:logger, :backends, [])
|> Enum.map(fn
{LoggerFileBackend, id} -> :application.get_env(:logger, id, nil)
_console -> nil
end)
|> Enum.reject(&is_nil/1)
end
end