Packages
timber
2.1.3
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/contextable.ex
defprotocol Timber.Contextable do
@moduledoc """
Converts a data structure into a `Timber.Context.t`. This is called on any data structure passed
in the `Timber.add_context/1` function.
For example, this protocol is how we're able to support maps:
```elixir
context_data = %{type: :build, data: %{version: "1.0"}}
Timber.add_context(context_data)
```
This is achieved by:
```elixir
defimpl Timber.Contextable, for: Map do
def to_context(%{type: type, data: data}) do
%Timber.Contexts.CustomContext{
type: type,
data: data
}
end
end
```
## What about custom contexts and structs?
We recommend defining a struct and calling `use Timber.Contexts.CustomContext` in that module.
This takes care of everything automatically. See `Timber.Contexts.CustomContext` for examples.
"""
@doc """
Converts the data structure into a `Timber.Event.t`.
"""
@spec to_context(any()) :: Timber.Context.t
def to_context(data)
end
defimpl Timber.Contextable, for: Timber.Contexts.CustomContext do
def to_context(context), do: context
end
defimpl Timber.Contextable, for: Timber.Contexts.HTTPContext do
def to_context(context), do: context
end
defimpl Timber.Contextable, for: Timber.Contexts.OrganizationContext do
def to_context(context), do: context
end
defimpl Timber.Contextable, for: Timber.Contexts.SessionContext do
def to_context(context), do: context
end
defimpl Timber.Contextable, for: Timber.Contexts.SystemContext do
def to_context(context), do: context
end
defimpl Timber.Contextable, for: Timber.Contexts.UserContext do
def to_context(context), do: context
end
defimpl Timber.Contextable, for: Map do
def to_context(%{type: type, data: data}) do
%Timber.Contexts.CustomContext{
type: type,
data: data
}
end
def to_context(map) when map_size(map) == 1 do
[type] = Map.keys(map)
[data] = Map.values(map)
%Timber.Contexts.CustomContext{
type: type,
data: data
}
end
end