Packages
timber
2.8.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/local_context.ex
defmodule Timber.LocalContext do
@moduledoc """
Manages Timber context through the `Elixir.Logger` metadata
This module stores context in the `Elixir.Logger` metadata, so any context is
specific to the process.
For more details about the context data structure, see `Timber.Context`.
"""
alias Timber.Context
@doc """
Merges the provided context into the existing context
`Timber.Context.add/2` is called to merge the existing context
with the provided context.
"""
@spec add(Context.t) :: :ok
def add(context) do
load()
|> Context.add(context)
|> save()
end
@doc """
Dumps the context to a `Context.t`
This function is used to expose the current context, which is useful
if you need to copy the context to a different process.
"""
@spec get() :: Context.t
def get() do
load()
end
@doc """
Sets the provided context, overriding any existing Context
"""
@spec put(Context.t) :: :ok
def put(context) do
save(context)
end
@doc false
@spec load() :: Context.t
def load() do
Elixir.Logger.metadata()
|> extract_from_metadata()
end
@doc false
@spec extract_from_metadata(Keyword.t) :: Context.t
# This function is required by Timber.LogEntry to extract the context
# from the Logger metadata, so this function _must_ be public, but it
# is only intended for internal use.
def extract_from_metadata(metadata) do
Keyword.get(metadata, :timber_context, Context.new())
end
@doc false
@spec save(Context.t) :: :ok
def save(context) do
Elixir.Logger.metadata([timber_context: context])
:ok
end
end