Kernel

Reference Manual

Version 6.0

Table of Contents

logger_formatter

Module

logger_formatter

Module Summary

Default formatter for the Logger application.

Description

Default formatter for the Logger application.

Data Types

template() = [atom() | tuple() | string()]

Exports

format(Log, Config) -> String

Types

Config =
    #{single_line => boolean(),
      legacy_header => boolean(),
      report_cb =>
          fun((logger:report()) -> {io:format(), [term()]}),
      chars_limit => integer() >= 1 | unlimited,
      max_size => integer() >= 1 | unlimited,
      depth => integer() >= 1 | unlimited,
      template => template(),
      utc => boolean()}
String = string()

Formats the given message.

The template is a list of atoms, tuples and strings. Atoms can be level or msg, which are placeholders for the severity level and the log message, repectively. Tuples are interpreted as placeholders for metadata. Each element in the tuple must be an atom which matches a key in the nested metadata map, e.g. the tuple {key1,key2} will be replaced by the value of the key2 field in this nested map (the value vill be converted to a string):

#{key1=>#{key2=>my_value,
          ...},
  ...}

Strings are printed literally.

depth is a positive integer representing the maximum depth to which terms shall be printed by this formatter. Format strings passed to this formatter are rewritten. The format controls ~p and ~w are replaced with ~P and ~W, respectively, and the value is used as the depth parameter. For details, see io:format/2,3 in STDLIB.

chars_limit is a positive integer representing the value of the option with the same name to be used when calling io:format/3. This value limits the total number of characters printed bu the formatter. Notes that this is a soft limit. For a hard truncation limit, see option max_size.

max_size is a positive integer representing the maximum size a string returned from this formatter can have. If the formatted string is longer, after possibly being limited by depth and/or chars_limit, it will be truncated.

utc is a boolean. If set to true, all dates are displayed in Universal Coordinated Time. Default is false.

report_cb must be a function with arity 1, returning {Format,Args}. This function will replace any report_cb found in metadata.

If single_line=true, all newlines in the message are replaced with ", ", and whitespaces following directly after newlines are removed. Note that newlines added by the formatter template are not replaced.

If legacy_header=true a header field is added to logger_formatter's part of Metadata. The value of this field is a string similar to the header created by the old error_logger event handlers. It can be included in the log event by adding the tuple {logger_formatter,header} to the template.

The default template when legacy_header=true is

[{logger_formatter,header},"\n",msg,"\n"]

which will cause log entries like this:

=ERROR REPORT==== 29-Dec-2017::13:30:51.245123 ===
    process: <0.74.0>
    exit_reason: "Something went wrong"

Note that all eight levels might occur here, not only ERROR, WARNING or INFO. And also that micro seconds are added at the end of the timestamp.

The default template when single_line=true is

[time," ",level,": ",msg,"\n"]

which will cause log entries like this:

2017-12-29 13:31:49.640317 error: process: <0.74.0>, exit_reason: "Something went wrong"

The default template when both legacy_header and single_line are set to false is:

[time," ",level,":\n",msg,"\n"]

which will cause log entries like this:

2017-12-29 13:32:25.191925 error:
    process: <0.74.0>
    exit_reason: "Something went wrong"