Packages
file_only_logger
0.2.41
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
@moduledoc """
A simple logger that writes messages to log files only (not to the console).
"""
use PersistConfig
@levels get_env(:levels)
@doc """
Either aliases `File.Only.Logger` (this module) and requires the alias or
imports `File.Only.Logger`. In the latter case, you could instead simply
`import File.Only.Logger`.
## Examples
use File.Only.Logger, alias: FileLogger
use File.Only.Logger
import File.Only.Logger
"""
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
@doc ~S'''
Injects function `info/2` into the caller's module.
The function will execute the `do_block` and write its result 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
@doc ~S'''
Injects function `error/2` into the caller's module.
The function will execute the `do_block` and write its result 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
for level <- @levels -- [:info, :error] do
defmacro unquote(level)(message_id, variables, do_block)
defmacro unquote(level)(message_id, variables, do: message) do
level = unquote(level)
quote do
def unquote(level)(unquote(message_id), unquote(variables)) do
File.Only.Logger.Proxy.log(unquote(level), unquote(message))
end
end
end
end
@doc ~S'''
Returns string "<module>.<function>/<arity>" e.g. "My.Math.sqrt/1" from the
given `env` (`Macro.Env`).
## Examples
use File.Only.Logger
error :exit, {reason, env} do
"""
\n'exit' caught...
• Reason: #{inspect(reason)}
• Function: #{fun(env)}\
"""
end
'''
defmacro fun(env) do
quote do
File.Only.Logger.Proxy.fun(unquote(env))
end
end
@doc ~S'''
Will prefix `string` with "\n<padding>" if `string` is longer than
`<line_length>` - `offset` where `<padding>` and `<line_length>` are
respectively the `:padding` and `:line_length` options.
## Options
* `:line_length` (positive integer) - the preferred line length of messages
sent to the log files. Defaults to 80.
* `:padding` (string) - Filler inserted after the line break. Defaults to
"\s\s".
## Examples
use File.Only.Logger
error :exit, {reason, env} do
"""
\n'exit' caught...
• Reason: #{inspect(reason)}
• Function: #{fun(env) |> maybe_break(12)}\
"""
end
'''
defmacro maybe_break(string, offset, options \\ []) do
string = Macro.expand(string, __CALLER__)
quote bind_quoted: [string: string, offset: offset, options: options] do
File.Only.Logger.Proxy.maybe_break(string, offset, options)
end
end
@doc ~S'''
Returns the application for the current process or module.
Returns `:undefined` if the current process does not belong to any
application or the current module is not listed in any application spec.
## Examples
use File.Only.Logger
error :exit, {reason} do
"""
\n'exit' caught...
• Reason: #{inspect(reason)}
• App: #{app()}\
"""
end
'''
defmacro app do
quote do
File.Only.Logger.Proxy.app(__MODULE__)
end
end
@doc ~S'''
Returns the current module as a string.
## Examples
use File.Only.Logger
error :exit, {reason} do
"""
\n'exit' caught...
• Reason: #{inspect(reason)}
• Module: #{mod()}\
"""
end
'''
defmacro mod do
quote do
File.Only.Logger.Proxy.mod(__MODULE__)
end
end
@doc ~S'''
Returns a formatted heredoc to trace a message from the given `env`
(`Macro.Env`).
## Examples
use File.Only.Logger
error :exit, {reason, env} do
"""
\n'exit' caught...
• Reason: #{inspect(reason)}
#{from(env)}\
"""
end
'''
defmacro from(env) do
quote do
File.Only.Logger.Proxy.from(unquote(env))
end
end
@doc ~S'''
Returns a formatted heredoc to trace a message from the given `env`
(`Macro.Env`) and `module`.
## Examples
use File.Only.Logger
error :exit, {reason, env} do
"""
\n'exit' caught...
• Reason: #{inspect(reason)}
#{from(env, __MODULE__)}\
"""
end
'''
defmacro from(env, module) do
quote do
File.Only.Logger.Proxy.from(unquote(env), unquote(module))
end
end
end