Current section
Files
Jump to
Current section
Files
lib/logfmt.ex
defmodule Logfmt do
@moduledoc """
Decodes and encodes logfmt-style log lines
In [logfmt][logfmt]-style log lines, data is encoded as a string of
`"key-value"` pairs. Logfmt can encode a `Dict` into a string in this format,
provided that its value types are `String.t`, `number`, and `boolean`.
It will decode a line in this format into a map, and attempt to coerce numbers
and booleans into integers, floats, and booleans.
[logfmt]: https://brandur.org/logfmt
"""
@doc ~S"""
Decodes the given line into a map
## Examples
iex> Logfmt.decode "foo=bar baz=qux"
%{"foo" => "bar", "baz" => "qux"}
iex> Logfmt.decode ~s(foo="bar baz")
%{"foo" => "bar baz"}
iex> Logfmt.decode "foo=true"
%{"foo" => true}
iex> Logfmt.decode "foo=1"
%{"foo" => 1}
"""
@spec decode(String.t) :: map
def decode(string) do
Logfmt.Decoder.decode(string)
end
@doc ~S"""
Encodes the given Dict into a Logfmt-style line
## Examples
iex> Logfmt.encode [foo: "bar"]
"foo=bar"
iex> Logfmt.encode %{"foo" => "bar"}
"foo=bar"
iex> Logfmt.encode [foo: "bar baz"]
"foo=\"bar baz\""
"""
@spec encode(Dict.t) :: String.t
def encode(list) do
Logfmt.Encoder.encode(list)
end
end