Packages
timber
2.5.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.
"""
use Application
alias Timber.Context
alias Timber.CurrentContext
@doc """
Adds a context entry to the stack. See `Timber::Contexts::CustomContext` for examples.
"""
@spec add_context(map | Keyword.t | Context.context_element) :: :ok
def add_context(data) do
CurrentContext.load()
|> Context.add(data)
|> CurrentContext.save()
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
@doc false
# Handles the application callback start/2
#
# Starts an empty supervisor in order to comply with callback expectations
#
# This is the function that starts up the error logger listener
#
def start(_type, _opts) do
import Supervisor.Spec, warn: false
children = []
opts = [strategy: :one_for_one, name: Timber.Supervisor]
Supervisor.start_link(children, opts)
end
end