Packages
timber
3.0.0
3.1.2
3.1.1
3.1.0
3.0.0
3.0.0-alpha.3
3.0.0-alpha.2
3.0.0-alpha.1
2.8.4
2.8.3
2.8.2
2.8.1
2.8.0
2.7.0
2.6.1
2.6.0
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.4.5
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.1
2.3.0
2.2.1
2.2.0
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
2.0.0-rc7
2.0.0-rc6
2.0.0-rc5
2.0.0-rc4
2.0.0-rc3
2.0.0-rc2
2.0.0-rc1
1.1.18
1.1.17
1.1.16
1.1.15
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
🌲 Great Elixir Logging Made Easy. Official Timber.io Integration.
Current section
Files
Jump to
Current section
Files
lib/timber.ex
defmodule Timber do
@moduledoc """
The functions in this module are high level convenience functions instended to define
the broader / public API of the Timber library. It is recommended to use these functions
instead of their deeper counterparts.
"""
alias Timber.Context
alias Timber.LocalContext
alias Timber.GlobalContext
@typedoc """
The target context to perform the operation.
- `:global` - This stores the context at a global level, meaning
it will be present on every log line, regardless of which process
generates the log line.
- `:local` - This stores the context in the Logger Metadata which
is local to the process
"""
@type context_location :: :local | :global
@doc """
Adds Timber context to the current process
See `add_context/2`
"""
@spec add_context(Context.element()) :: :ok
def add_context(data, location \\ :local)
@doc """
Adds context which will be included on log entries
The second parameter indicates where you want the context to be
stored. See `context_location` for more details.
"""
@spec add_context(Context.element(), context_location) :: :ok
def add_context(data, :local) do
LocalContext.add(data)
end
def add_context(data, :global) do
GlobalContext.add(data)
end
@doc """
Removes a key from Timber context on the current process.
See `remove_context_key/2`
"""
@spec remove_context_key(atom) :: :ok
def remove_context_key(key, location \\ :local)
@doc """
Removes a context key.
The second parameter indicates which context you want the key to be removed from.
"""
@spec remove_context_key(atom, context_location) :: :ok
def remove_context_key(key, :local) do
LocalContext.remove_key(key)
end
def remove_context_key(key, :global) do
GlobalContext.remove_key(key)
end
@doc """
Used to time runtime execution. For example, when timing a `Timber.Events.HTTPResponseEvent`:
```elixir
timer = Timber.start_timer()
# .... make request
time_ms = Timber.duration_ms(timer)
event = HTTPResponseEvent.new(status: 200, time_ms: time_ms)
message = HTTPResponseEvent.message(event)
Logger.info(message, event: event)
```
"""
defdelegate start_timer, to: Timber.Timer, as: :start
@doc """
Captures the duration in fractional milliseconds since the timer was started. See
`start_timer/0`.
"""
defdelegate duration_ms(timer), to: Timber.Timer
@doc false
def debug(message_fun) do
Timber.Config.debug_io_device()
|> debug(message_fun)
end
@doc false
def debug(nil, _message_fun) do
false
end
def debug(io_device, message_fun) when is_function(message_fun) do
IO.write(io_device, message_fun.())
end
end