Packages
log_reset
0.1.33
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/config_paths.ex
defmodule Log.Reset.ConfigPaths do
@moduledoc """
Resets configured log files.
"""
# Must be in that order given the common 'Log' part...
alias Log.Reset
alias Log.Reset.Log
@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(config_paths, :all) do
config_paths |> log_paths() |> reset_logs()
end
def reset_logs(_config_paths, :none), do: :ok
def reset_logs(config_paths, levels) when is_list(levels) do
for {level, log_path} <- config_paths, level in levels do
log_path
end
|> reset_logs()
end
def reset_logs(_config_paths, _), do: :ok
@doc """
Returns a list of configured log paths.
"""
@spec log_paths(t) :: [Path.t()]
def log_paths(config_paths), do: Map.values(config_paths)
@doc """
Returns a map of configured log paths.
"""
@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)
# Log results afterwards...
|> 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})
{:error, reason, log_path}, _acc ->
:ok = Log.error(:log_not_reset, {log_path, reason})
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
:logger
|> :application.get_env(:backends, [])
|> Enum.map(fn
{LoggerFileBackend, id} -> :application.get_env(:logger, id, nil)
_console? -> nil
end)
|> Enum.reject(&is_nil/1)
end
end