File 3512-kernel-Expand-documentation-of-logger-log-with-fun.patch of Package erlang

From 4fe05a5dabd057ada2d637f38173e938e4e8468e Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erlang.org>
Date: Thu, 11 Feb 2021 09:52:33 +0100
Subject: [PATCH 2/2] kernel: Expand documentation of logger:log with fun

---
 lib/kernel/doc/src/logger.xml         | 36 +++++++++++++++++++++++++--
 lib/kernel/doc/src/logger_chapter.xml | 18 +++++++++-----
 2 files changed, 46 insertions(+), 8 deletions(-)

diff --git a/lib/kernel/doc/src/logger.xml b/lib/kernel/doc/src/logger.xml
index 2f2417690b..acf695d112 100644
--- a/lib/kernel/doc/src/logger.xml
+++ b/lib/kernel/doc/src/logger.xml
@@ -450,12 +450,44 @@ logger:error("error happened because: ~p", [Reason]). % Without macro
       <type variable="FunArgs" name_i="4"/>
       <type variable="Metadata"/>
       <desc>
-        <p>Log the given message.</p>
+        <p>Create a log event at the given
+          <seeguide marker="logger_chapter#log_level">log level</seeguide>,
+          with the given <seeguide marker="logger_chapter#log_message">message</seeguide>
+          to be logged and
+          <seeguide marker="logger_chapter#metadata"><em>metadata</em></seeguide>.
+        Examples:</p>
+        <code>
+%% A plain string
+logger:log(info, "Hello World").
+%% A plain string with metadata
+logger:log(debug, "Hello World", #{ meta => data }).
+%% A format string with arguments
+logger:log(warning, "The roof is on ~ts",[Cause]).
+%% A report
+logger:log(warning, #{ what => roof, cause => Cause }).
+        </code>
+        <p>The message and metadata can either be given directly in the arguments,
+          or returned from a fun. Passing a fun instead of the message/metadata directly is
+          useful in scenarios when the message/metadata is very expensive to compute.
+          This is because the fun is only evaluted when the message/metadata is
+          actually needed, which may be not at all if the log event is not
+          to be logged. Examples:</p>
+        <code>
+%% A plain string with expensive metadata
+logger:info(fun([]) -> {"Hello World", #{ meta => expensive() }} end,[]).
+%% An expensive report
+logger:debug(fun(What) -> #{ what => What, cause => expensive() } end,roof).
+%% A plain string with expensive metadata and normal metadata
+logger:debug(fun([]) -> {"Hello World", #{ meta => expensive() }} end,[],
+             #{ meta => data }).
+        </code>
+        <p>When metadata is given both as an argument and returned from the fun they
+          are merged. If equal keys exists the values are taken from the metadata
+          returned by the fun.</p>
       </desc>
     </func>
   </funcs>
 
- 
   <funcs>
     <fsdescription>
       <marker id="configuration_API"/>
diff --git a/lib/kernel/doc/src/logger_chapter.xml b/lib/kernel/doc/src/logger_chapter.xml
index b082607751..c2c70ce884 100644
--- a/lib/kernel/doc/src/logger_chapter.xml
+++ b/lib/kernel/doc/src/logger_chapter.xml
@@ -192,8 +192,18 @@
       <p>The log message contains the information to be logged. The
 	message can consist of a format string and arguments (given as
 	two separate parameters in the Logger API), a string or a
-	report. The latter, which is either a map or a key-value list,
-	can be accompanied by a <em>report callback</em> specified in
+        report.</p>
+      <p>Example, format string and arguments:</p>
+      <code>logger:error("The file does not exist: ~ts",[Filename])</code>
+      <p>Example, string:</p>
+      <code>logger:notice("Something strange happened!")</code>
+      <p>A report, which is either a map or a key-value list, is
+        the preferred way to log using Logger as it makes it possible
+        for different backends to filter and format the log event as it
+        needs to.</p>
+      <p>Example, report:</p>
+      <code>?LOG_ERROR(#{ user => joe, filename => Filename, reason => enoent })</code>
+      <p>Reports can be accompanied by a <em>report callback</em> specified in
 	the log event's <seeguide marker="#metadata">metadata</seeguide>.
 	The report callback is a convenience function that
 	the <seeguide marker="#formatters">formatter</seeguide> can use
@@ -219,10 +229,6 @@
 	contain line breaks or not. This variant is used when the
 	formatting of the report depends on the size or single line
 	parameters.</p>
-      <p>Example, format string and arguments:</p>
-      <code>logger:error("The file does not exist: ~ts",[Filename])</code>
-      <p>Example, string:</p>
-      <code>logger:notice("Something strange happened!")</code>
       <p>Example, report, and metadata with report callback:</p>
       <code>
 logger:debug(#{got => connection_request, id => Id, state => State},
-- 
2.26.2

openSUSE Build Service is sponsored by