aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSiri Hansen <[email protected]>2018-05-02 19:20:27 +0200
committerSiri Hansen <[email protected]>2018-05-07 12:02:25 +0200
commit3cef0524e4332ebf547180ec0d0feafe0a559b5c (patch)
tree26d95510da97051b94e31435249a5d409673af53
parent336e7eed4e44fe9267234e4702db6fd613064dcd (diff)
downloadotp-3cef0524e4332ebf547180ec0d0feafe0a559b5c.tar.gz
otp-3cef0524e4332ebf547180ec0d0feafe0a559b5c.tar.bz2
otp-3cef0524e4332ebf547180ec0d0feafe0a559b5c.zip
Add logger:update_process_metadata/1
-rw-r--r--lib/kernel/doc/src/logger.xml22
-rw-r--r--lib/kernel/src/logger.erl17
-rw-r--r--lib/kernel/test/logger_SUITE.erl3
3 files changed, 36 insertions, 6 deletions
diff --git a/lib/kernel/doc/src/logger.xml b/lib/kernel/doc/src/logger.xml
index 2beefd1240..2f7feb5eef 100644
--- a/lib/kernel/doc/src/logger.xml
+++ b/lib/kernel/doc/src/logger.xml
@@ -471,10 +471,9 @@ Current logger configuration:
<name name="set_process_metadata" arity="1"/>
<fsummary>Set metadata to use when logging from current process.</fsummary>
<desc>
- <p>Set metadata which <c>logger</c> automatically inserts it
- in all log events produced on the current
- process. Subsequent calls will overwrite previous data set
- by this function.</p>
+ <p>Set metadata which <c>logger</c> automatically inserts in
+ all log events produced on the current process. Subsequent
+ calls will overwrite previous data set by this function.</p>
<p>When logging, location data produced by the log macros,
and/or metadata given as argument to the log call (API
function or macro), will be merged with the process
@@ -486,6 +485,21 @@ Current logger configuration:
</func>
<func>
+ <name name="update_process_metadata" arity="1"/>
+ <fsummary>Update metadata to use when logging from current process.</fsummary>
+ <desc>
+ <p>Update metadata to use when logging from current process</p>
+ <p>This function behaves as if it was implemented as follows:</p>
+ <code type="erl">
+logger:set_process_metadata(maps:merge(logger:get_process_metadata(),Meta))
+ </code>
+ <p>If no process metadata exists, the function behaves as
+ <seealso marker="#set_process_metadata-1"><c>set_process_metadata/1</c>
+ </seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
<name name="get_process_metadata" arity="0"/>
<fsummary>Retrieve data set with set_process_metadata/1.</fsummary>
<desc>
diff --git a/lib/kernel/src/logger.erl b/lib/kernel/src/logger.erl
index 943ef8c2d1..5562764204 100644
--- a/lib/kernel/src/logger.erl
+++ b/lib/kernel/src/logger.erl
@@ -44,8 +44,8 @@
%% Misc
-export([compare_levels/2]).
--export([set_process_metadata/1, unset_process_metadata/0,
- get_process_metadata/0]).
+-export([set_process_metadata/1, update_process_metadata/1,
+ unset_process_metadata/0, get_process_metadata/0]).
-export([i/0, i/1]).
-export([setup_standard_handler/0, replace_simple_handler/3]).
-export([limit_term/1, get_format_depth/0, get_max_size/0, get_utc_config/0]).
@@ -390,6 +390,19 @@ set_process_metadata(Meta) when is_map(Meta) ->
set_process_metadata(Meta) ->
erlang:error(badarg,[Meta]).
+-spec update_process_metadata(Meta) -> ok when
+ Meta :: metadata().
+update_process_metadata(Meta) when is_map(Meta) ->
+ case get_process_metadata() of
+ undefined ->
+ set_process_metadata(Meta);
+ Meta0 when is_map(Meta0) ->
+ set_process_metadata(maps:merge(Meta0,Meta)),
+ ok
+ end;
+update_process_metadata(Meta) ->
+ erlang:error(badarg,[Meta]).
+
-spec get_process_metadata() -> Meta | undefined when
Meta :: metadata().
get_process_metadata() ->
diff --git a/lib/kernel/test/logger_SUITE.erl b/lib/kernel/test/logger_SUITE.erl
index 0edce3e34c..94fd87bdb0 100644
--- a/lib/kernel/test/logger_SUITE.erl
+++ b/lib/kernel/test/logger_SUITE.erl
@@ -666,6 +666,9 @@ process_metadata(_Config) ->
check_logged(info,S3,#{time=>Time,line=>0,custom=>func}),
ProcMeta = logger:get_process_metadata(),
+ ok = logger:update_process_metadata(#{custom=>changed,custom2=>added}),
+ Expected = ProcMeta#{custom:=changed,custom2=>added},
+ Expected = logger:get_process_metadata(),
ok = logger:unset_process_metadata(),
undefined = logger:get_process_metadata(),