Logger.Formatter

Conveniences for formatting data for logs.

This module allows developers to specify a string that serves as template for log messages, for example:

$time $metadata[$level] $message\n

Will print error messages as:

18:43:12.439 user_id=13 [error] Hello\n

The valid parameters you can use are:

  • $time - time the log message was sent
  • $date - date the log message was sent
  • $message - the log message
  • $level - the log level
  • $node - the node that prints the message
  • $metadata - user controlled data presented in "key=val key2=val2" format
  • $levelpad - set to a single space if level is 4 characters long, otherwise set to the empty space. Used to align the message after level.

Backends typically allow developers to supply such control strings via configuration files. This module provides compile/1, which compiles the string into a format for fast operations at runtime and format/5 to format the compiled pattern into an actual IO data.

Metadata

Metadata to be sent to the Logger can be read and written with the Logger.metadata/0 and Logger.metadata/1 functions. For example, you can set Logger.metadata([user_id: 13]) to add user_id metadata to the current process. The user can configure the backend to chose which metadata it wants to print and it will replace the $metadata value.

Summary

Types

pattern()
time()

Functions

compile(str)

Compiles a format string into a data structure that the format/5 can handle

format(config, level, msg, ts, md)

Takes a compiled format and injects the, level, timestamp, message and metadata listdict and returns a properly formatted string

prune(binary)

Prune non-valid UTF-8 codepoints

Types

pattern()

pattern ::
  :date |
  :level |
  :levelpad |
  :message |
  :metadata |
  :node |
  :time

time()

time() :: {{1970..10000, 1..12, 1..31}, {0..23, 0..59, 0..59, 0..999}}

Functions

compile(str)

compile({atom, atom}) :: {atom, atom}
compile(binary | nil) :: [pattern | binary]

Compiles a format string into a data structure that the format/5 can handle.

Check the module doc for documentation on the valid parameters. If you pass nil, it defaults to: $time $metadata [$level] $levelpad$message\n

If you would like to make your own custom formatter simply pass {module, function} to compile/1 and the rest is handled.

iex> Logger.Formatter.compile("$time $metadata [$level] $message\n")
[:time, " ", :metadata, " [", :level, "] ", :message, "\n"]

format(config, level, msg, ts, md)

format({atom, atom} | [pattern | binary], Logger.level, Logger.message, time, Keyword.t) :: IO.chardata

Takes a compiled format and injects the, level, timestamp, message and metadata listdict and returns a properly formatted string.

prune(binary)

prune(IO.chardata) :: IO.chardata

Prune non-valid UTF-8 codepoints.

Typically called after formatting when the data cannot be printed.

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/logger/1.3.4/Logger.Formatter.html