Packages
timber
1.0.16
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/eventable.ex
defprotocol Timber.Eventable do
@moduledoc """
Converts a data structure into a `Timber.Event.t`. This is called on any data structure passed
in the `:event` metadata key passed to `Logger`.
For example, this protocol is how we're able to support maps:
```elixir
event_data = %{customer_id: "xiaus1934", amount: 1900, currency: "USD"}
Logger.info "Payment rejected", event: event_data
```
This is achieved by:
```elixir
defimpl Timber.Eventable, for: Map do
def to_event(%{type: type, data: data}) do
%Timber.Events.CustomEvent{
type: type,
data: data
}
end
end
```
## What about custom events and structs?
We recommend defining a struct and calling `use Timber.Events.CustomEvent` in that module.
This takes care of everything automatically. See `Timber.Events.CustomEvent` for examples.
"""
@doc """
Converts the data structure into a `Timber.Event.t`.
"""
@spec to_event(any()) :: Timber.Event.t
def to_event(data)
end
defimpl Timber.Eventable, for: Timber.Events.ControllerCallEvent do
def to_event(event), do: event
end
defimpl Timber.Eventable, for: Timber.Events.CustomEvent do
def to_event(event), do: event
end
defimpl Timber.Eventable, for: Timber.Events.ExceptionEvent do
def to_event(event), do: event
end
defimpl Timber.Eventable, for: Timber.Events.HTTPClientRequestEvent do
def to_event(event), do: event
end
defimpl Timber.Eventable, for: Timber.Events.HTTPClientResponseEvent do
def to_event(event), do: event
end
defimpl Timber.Eventable, for: Timber.Events.HTTPServerRequestEvent do
def to_event(event), do: event
end
defimpl Timber.Eventable, for: Timber.Events.HTTPServerResponseEvent do
def to_event(event), do: event
end
defimpl Timber.Eventable, for: Timber.Events.SQLQueryEvent do
def to_event(event), do: event
end
defimpl Timber.Eventable, for: Timber.Events.TemplateRenderEvent do
def to_event(event), do: event
end
defimpl Timber.Eventable, for: Map do
def to_event(%{type: type, data: data}) do
%Timber.Events.CustomEvent{
type: type,
data: data
}
end
def to_event(map) when map_size(map) == 1 do
[type] = Map.keys(map)
[data] = Map.values(map)
%Timber.Events.CustomEvent{
type: type,
data: data
}
end
end