oracular (3) logger_formatter.3erl.gz

Provided by: erlang-manpages_25.3.2.12+dfsg-1ubuntu2_all bug

NAME

       logger_formatter - Default formatter for Logger.

DESCRIPTION

       Each  Logger  handler  has  a  configured  formatter  specified as a module and a configuration term. The
       purpose of the formatter is to translate the log events to a final printable string  (unicode:chardata())
       which  can  be  written  to the output device of the handler. See sections Handlers and Formatters in the
       Kernel User's Guide for more information.

       logger_formatter is the default formatter used by Logger.

DATA TYPES

       config() =
           #{chars_limit => integer() >= 1 | unlimited,
             depth => integer() >= 1 | unlimited,
             legacy_header => boolean(),
             max_size => integer() >= 1 | unlimited,
             report_cb => logger:report_cb(),
             single_line => boolean(),
             template => template(),
             time_designator => byte(),
             time_offset => integer() | [byte()]}

              The configuration term for logger_formatter is a map,  and  the  following  keys  can  be  set  as
              configuration parameters:

                chars_limit = integer() > 0 | unlimited:
                  A  positive  integer  representing  the value of the option with the same name to be used when
                  calling io_lib:format/3. This value limits the total number of characters printed for each log
                  event. Notice that this is a soft limit. For a hard truncation limit, see option max_size.

                  Defaults to unlimited.

                depth = integer() > 0 | unlimited:
                  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.

                  Defaults to unlimited.

                legacy_header = boolean():
                  If set to 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  list  [logger_formatter,header]  to  the
                  template. See the description of the template() type for more information.

                  Defaults to false.

                max_size = integer() > 0 | unlimited:
                  A  positive  integer  representing  the  absolute  maximum  size  a  string returned from this
                  formatter can have. If the formatted  string  is  longer,  after  possibly  being  limited  by
                  chars_limit or depth, it is truncated.

                  Defaults to unlimited.

                report_cb = logger:report_cb():
                  A  report  callback  is  used  by  the formatter to transform log messages on report form to a
                  format string and arguments. The report callback can be specified in the metadata for the  log
                  event.   If   no   report   callback   exists   in   metadata,   logger_formatter   will   use
                  logger:format_report/1 as default callback.

                  If this configuration parameter is set, it replaces both the default report callback, and  any
                  report  callback  found  in  metadata.  That  is, all reports are converted by this configured
                  function.

                single_line = boolean():
                  If set to true, each log event is printed as a single line. To achieve this,  logger_formatter
                  sets  the  field  width  to  0 for all ~p and ~P control sequences in the format a string (see
                  io:format/2), and replaces all newlines in the message  with  ",  ".  White  spaces  following
                  directly  after newlines are removed. Notice that newlines added by the template parameter are
                  not replaced.

                  Defaults to true.

                template = template():
                  The template describes how the formatted string is composed by combining different data values
                  from  the  log  event.  See  the description of the template() type for more information about
                  this.

                time_designator = byte():
                  Timestamps are formatted according to RFC3339, and the time designator is the  character  used
                  as date and time separator.

                  Defaults to $T.

                  The    value    of    this    parameter   is   used   as   the   time_designator   option   to
                  calendar:system_time_to_rfc3339/2.

                time_offset = integer() | [byte()]:
                  The time offset, either a string or an integer, to be used when formatting the timestamp.

                  An empty string is interpreted as local time. The values "Z", "z"  or  0  are  interpreted  as
                  Universal Coordinated Time (UTC).

                  Strings,  other  than "Z", "z", or "", must be on the form ±[hh]:[mm], for example "-02:00" or
                  "+00:00".

                  Integers must be in  microseconds,  meaning  that  the  offset  7200000000  is  equivalent  to
                  "+02:00".

                  Defaults to an empty string, meaning that timestamps are displayed in local time. However, for
                  backwards compatibility, if the SASL configuration  parameter  utc_log=true,  the  default  is
                  changed to "Z", meaning that timestamps are displayed in UTC.

                  The value of this parameter is used as the offset option to calendar:system_time_to_rfc3339/2.

       metakey() = atom() | [atom()]

       template() =
           [metakey() |
            {metakey(), template(), template()} |
            unicode:chardata()]

              The  template  is  a  list  of  atoms, atom lists, tuples and strings. The atoms level or msg, are
              treated as placeholders for the severity level and the log message, respectively. Other  atoms  or
              atom  lists  are  interpreted  as placeholders for metadata, where atoms are expected to match top
              level keys, and atom lists represent paths to sub keys when the metadata  is  a  nested  map.  For
              example  the  list [key1,key2] is replaced by the value of the key2 field in the nested map below.
              The atom key1 on its own is replaced by the complete value of  the  key1  field.  The  values  are
              converted to strings.

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

              Tuples  in the template express if-exist tests for metadata keys. For example, the following tuple
              says that if key1 exists in the metadata map, print "key1=Value", where Value is  the  value  that
              key1 is associated with in the metadata map. If key1 does not exist, print nothing.

              {key1, ["key1=",key1], []}

              Strings in the template are printed literally.

              The default value for the template configuration parameter depends on the value of the single_line
              and legacy_header configuration parameters as follows.

              The log event used in the examples is:

              ?LOG_ERROR("name: ~p~nexit_reason: ~p", [my_name, "It crashed"])

                legacy_header = true, single_line = false:
                  Default template: [[logger_formatter,header],"\n",msg,"\n"]

                  Example log entry:

                =ERROR REPORT==== 17-May-2018::18:30:19.453447 ===
                name: my_name
                exit_reason: "It crashed"

                  Notice that all eight levels can occur in the heading, not only  ERROR,  WARNING  or  INFO  as
                  error_logger produces. And microseconds are added at the end of the timestamp.

                legacy_header = true, single_line = true:
                  Default template: [[logger_formatter,header],"\n",msg,"\n"]

                  Notice  that  the  template  is  here the same as for single_line=false, but the resulting log
                  entry differs in that there is only one line after the heading:

                =ERROR REPORT==== 17-May-2018::18:31:06.952665 ===
                name: my_name, exit_reason: "It crashed"

                legacy_header = false, single_line = true:
                  Default template: [time," ",level,": ",msg,"\n"]

                  Example log entry:

                2018-05-17T18:31:31.152864+02:00 error: name: my_name, exit_reason: "It crashed"

                legacy_header = false, single_line = false:
                  Default template: [time," ",level,":\n",msg,"\n"]

                  Example log entry:

                2018-05-17T18:32:20.105422+02:00 error:
                name: my_name
                exit_reason: "It crashed"

EXPORTS

       check_config(Config) -> ok | {error, term()}

              Types:

                 Config = config()

              The function is called by Logger when  the  formatter  configuration  for  a  handler  is  set  or
              modified. It returns ok if the configuration is valid, and {error,term()} if it is faulty.

              The following Logger API functions can trigger this callback:

                * logger:add_handler/3

                * logger:set_handler_config/2,3

                * logger:update_handler_config/2

                * logger:update_formatter_config/2

       format(LogEvent, Config) -> unicode:chardata()

              Types:

                 LogEvent = logger:log_event()
                 Config = config()

              This  the  formatter  callback  function to be called from handlers. The log event is processed as
              follows:

                * If the message is on report form, it is converted  to  {Format,Args}  by  calling  the  report
                  callback. See section Log Message in the Kernel User's Guide for more information about report
                  callbacks and valid forms of log messages.

                * The message size is limited according to the values of  configuration  parameters  chars_limit
                  and depth.

                * The full log entry is composed according to the template.

                * If  the  final  string  is  too  long, it is truncated according to the value of configuration
                  parameter max_size.

SEE ALSO

       calendar(3erl),  error_logger(3erl),   io(3erl),   io_lib(3erl),   logger(3erl),   maps(3erl),   sasl(7),
       unicode(3erl)