Packages
timber
2.1.6
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/logfmt_encoder.ex
defmodule Timber.LogfmtEncoder do
@moduledoc false
# Internal module for encoding maps to the logfmt standard
@spec encode!(map) :: IO.chardata
def encode!(value) when is_map(value) do
Enum.reduce(value, [], &encode_pair/2)
end
defp encode_pair({k1, value_map}, acc) when is_map(value_map) do
Enum.reduce(value_map, acc, fn ({k2, v}, a) ->
encode_pair({[to_string(k1), ?., to_string(k2)], v}, a)
end)
end
defp encode_pair({key, values}, acc) when is_list(values) do
Enum.reduce(values, acc, fn (value, a)->
encode_pair({key, value}, a)
end)
end
defp encode_pair({key, value}, acc) do
add_key_value(key, value, acc)
end
defp add_key_value(key, value, []) do
[to_bin(key), ?=, to_bin(value)]
end
defp add_key_value(key, value, acc) do
[to_bin(key), ?=, to_bin(value), ?\s | acc]
end
defp to_bin(value) when is_binary(value) do
if String.contains?(value, " ") do
[?", value, ?"]
else
value
end
end
defp to_bin(value) do
to_string(value)
end
end