Packages
log_reset
0.1.27
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 """
Creates and clears 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 """
Creates and clears the configured log files of given `levels`.
"""
@spec clear_logs(t, Reset.levels()) :: :ok
def clear_logs(config_paths, levels)
def clear_logs(config_paths, :all) do
Enum.reduce(config_paths, :ok, fn {_level, path}, _acc ->
clear_log(path)
end)
end
def clear_logs(_config_paths, :none), do: :ok
def clear_logs(config_paths, levels) when is_list(levels) do
Enum.reduce(config_paths, :ok, fn {level, path}, acc ->
if level in levels, do: clear_log(path), else: acc
end)
end
def clear_logs(_config_paths, _unknown), do: :ok
@doc """
Returns a list of configured log paths.
"""
@spec log_paths(t) :: [Path.t()]
def log_paths(config_paths) do
for {_level, path} <- config_paths do
path
end
end
@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 clear_log(Path.t()) :: :ok
defp clear_log(log_path) do
log_path = Path.expand(log_path)
dir_path = Path.dirname(log_path)
create_dir(dir_path)
case File.write(log_path, "") do
:ok -> Log.info(:cleared, {log_path, __ENV__})
{:error, reason} -> Log.error(:not_cleared, {log_path, reason, __ENV__})
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
@spec create_dir(Path.t()) :: :ok
defp create_dir(dir_path) do
case File.mkdir_p(dir_path) do
:ok -> :ok
{:error, reason} -> Log.error(:not_created, {dir_path, reason, __ENV__})
end
end
end