Packages
timber
2.7.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/event.ex
defmodule Timber.Event do
@moduledoc """
A common interface for working with structures in the `Timber.Events` namespace.
"""
alias Timber.Events
alias Timber.Utils.Map, as: UtilsMap
@type t ::
Events.ChannelJoinEvent |
Events.ChannelReceiveEvent |
Events.ControllerCallEvent |
Events.CustomEvent |
Events.ErrorEvent |
Events.HTTPRequestEvent |
Events.HTTPResponseEvent |
Events.SQLQueryEvent |
Events.TemplateRenderEvent
@doc false
@spec extract_from_metadata(Keyword.t) :: nil | t
def extract_from_metadata(metadata) do
Keyword.get(metadata, Timber.Config.event_key(), nil)
end
@doc false
@spec to_metadata(Timber.Event.t) :: Keyword.t
def to_metadata(event) do
Keyword.put([], Timber.Config.event_key(), event)
end
@doc false
@spec to_api_map(t) :: map
def to_api_map(%Events.CustomEvent{type: type} = event) when is_binary(type) do
atom_type = String.to_atom(type)
%{event | type: atom_type}
|> to_api_map()
end
def to_api_map(%Events.CustomEvent{type: type, data: data}) do
data = normalize_data(data)
%{custom: %{type => data}}
end
def to_api_map(%Events.ControllerCallEvent{} = event) do
type = type(event)
map =
event
|> normalize_data()
|> Map.delete(:pipelines)
%{type => map}
end
def to_api_map(event) do
type = type(event)
map = normalize_data(event)
%{type => map}
end
defp normalize_data(data) do
data
|> UtilsMap.deep_from_struct()
|> UtilsMap.recursively_drop_blanks()
end
@doc """
Returns the official Timber type for this event. Used as the JSON map key when
sending to Timber.
"""
@spec type(t) :: atom()
def type(%Events.ChannelJoinEvent{}), do: :channel_join
def type(%Events.ChannelReceiveEvent{}), do: :channel_receive
def type(%Events.ControllerCallEvent{}), do: :controller_call
def type(%Events.CustomEvent{}), do: :custom
def type(%Events.ErrorEvent{}), do: :error
def type(%Events.HTTPRequestEvent{}), do: :http_request
def type(%Events.HTTPResponseEvent{}), do: :http_response
def type(%Events.SQLQueryEvent{}), do: :sql_query
def type(%Events.TemplateRenderEvent{}), do: :template_render
end