Packages
file_only_logger
0.1.24
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.ex
defmodule File.Only.Logger do
defmacro __using__(options) do
alias = options[:alias]
if alias do
quote do
alias unquote(__MODULE__), as: unquote(alias)
require unquote(alias)
end
else
quote do
import unquote(__MODULE__)
end
end
end
defmacro debug(message_id, variables, do_block)
defmacro debug(message_id, variables, do: message) do
quote do
def debug(unquote(message_id), unquote(variables)) do
File.Only.Logger.Proxy.log(:debug, unquote(message))
end
end
end
@doc ~S'''
Injects function `info` into the caller's module.
The function will write the `message` returned by the `do_block`
to the configured info log file.
## Examples
use File.Only.Logger
info :game_state, {player, game} do
"""
\nNote that #{player.name}...
• Has joined game #{inspect(game.name)}
• Game state: #{inspect(game.state)}
"""
end
'''
defmacro info(message_id, variables, do_block)
defmacro info(message_id, variables, do: message) do
quote do
def info(unquote(message_id), unquote(variables)) do
File.Only.Logger.Proxy.log(:info, unquote(message))
end
end
end
defmacro notice(message_id, variables, do_block)
defmacro notice(message_id, variables, do: message) do
quote do
def notice(unquote(message_id), unquote(variables)) do
File.Only.Logger.Proxy.log(:notice, unquote(message))
end
end
end
defmacro warning(message_id, variables, do_block)
defmacro warning(message_id, variables, do: message) do
quote do
def warning(unquote(message_id), unquote(variables)) do
File.Only.Logger.Proxy.log(:warning, unquote(message))
end
end
end
defmacro warn(message_id, variables, do_block)
defmacro warn(message_id, variables, do: message) do
quote do
def warn(unquote(message_id), unquote(variables)) do
File.Only.Logger.Proxy.log(:warn, unquote(message))
end
end
end
@doc ~S'''
Injects function `error` into the caller's module.
The function will write the `message` returned by the `do_block`
to the configured error log file.
## Examples
use File.Only.Logger
error :exit, {reason} do
"""
\n'exit' caught...
• Reason:
#{inspect(reason)}
"""
end
'''
defmacro error(message_id, variables, do_block)
defmacro error(message_id, variables, do: message) do
quote do
def error(unquote(message_id), unquote(variables)) do
File.Only.Logger.Proxy.log(:error, unquote(message))
end
end
end
defmacro critical(message_id, variables, do_block)
defmacro critical(message_id, variables, do: message) do
quote do
def critical(unquote(message_id), unquote(variables)) do
File.Only.Logger.Proxy.log(:critical, unquote(message))
end
end
end
defmacro alert(message_id, variables, do_block)
defmacro alert(message_id, variables, do: message) do
quote do
def alert(unquote(message_id), unquote(variables)) do
File.Only.Logger.Proxy.log(:alert, unquote(message))
end
end
end
defmacro emergency(message_id, variables, do_block)
defmacro emergency(message_id, variables, do: message) do
quote do
def emergency(unquote(message_id), unquote(variables)) do
File.Only.Logger.Proxy.log(:emergency, unquote(message))
end
end
end
@doc ~S'''
Returns string "module.function/arity" for the given `environment`.
## Examples
use File.Only.Logger
error :exit, {reason, env} do
"""
\n'exit' caught...
• Reason:
#{inspect(reason)}
• Inside function:
#{fun(env)}
"""
end
'''
defmacro fun(env) do
quote bind_quoted: [env: env] do
case env do
%Macro.Env{function: {name, arity}} ->
if name |> to_string() |> String.contains?(" "),
do: "#{inspect(env.module)}.'#{name}'/#{arity}",
else: "#{inspect(env.module)}.#{name}/#{arity}"
%Macro.Env{function: nil} ->
"'not inside a function'"
end
end
end
defmacro app do
quote do
case :application.get_application() do
{:ok, app} -> app
:undefined -> :undefined
end
end
end
defmacro lib do
quote do
unquote(Mix.Project.config()[:app])
end
end
defmacro mod do
quote do
"#{inspect(__MODULE__)}"
end
end
defmacro from do
quote do
"""
• App: #{app()}
• Library: #{lib()}
• Module: #{mod()}
"""
|> String.trim_trailing()
end
end
end