mainHexHex DocsLicense

LogfmtEx

Yet another logfmt log formatter for Elixir's :console logger backend.

In your app's logger configuration, specify the LogfmtEx module and its format function to be used to format your logs:

config :logger, :console,
format: {LogfmtEx, :format}

Installation

The package can be installed by adding logfmt_ex to your list of dependencies in mix.exs:

def deps do
[
{:logfmt_ex, "~> 0.1"}
]
end

Configuration

While the library guidelines discourages application configuration, we have no way to pass a config to the formatter, so we have to rely on application config.

The following configuration options are available under LogfmtEx, :opts:

An example configuration would then look like

config :logger, :console,
format: {LogfmtEx, :format},
metadata: [:user_id, :pid, :file]
config LogfmtEx, :opts,
format: [:level, :message, :node, :timestamp, :metadata],
timestamp_key: "ts",
message_key: "msg"

for which Logger.info("I am a message", user_id: 123) would ouput something along the lines of

level=info msg="I am a message" ts="12:38:38.055 1973-03-12" user_id=123 pid=#PID<0.223.0> file=test/logfmt_ex_test.exs\n

Note

When specifying a function for the :console logger's :format option, there is no way to pass in additional config, so these configuration options are read for every call to the logger.

Encoding

Structs can be encoded via the LogfmtEx.ValueEncoder protocol.

defimpl LogfmtEx.ValueEncoder, for: Regex do
def encode(regex), do: inspect(regex)
end

Testing and Development

This library uses asdf to manage runtime versions of Elixir and Erlang.

Alternatives

LogfmtEx is a simple logfmt formatter specifically for the Elixir console backend. If you're looking for a library to encode and decode logfmt, take a look at logfmt-elixir instead.