From 5d49f8a25005945b7260facc1a985c294746616b Mon Sep 17 00:00:00 2001
From: Siri Hansen
Date: Mon, 14 May 2018 20:27:55 +0200
Subject: Add update_logger_config/1 and update_handler_config/2 to logger
---
lib/kernel/doc/src/logger.xml | 54 ++++++++++++++++++++++++++++++++--------
lib/kernel/src/logger.erl | 12 +++++++++
lib/kernel/src/logger_server.erl | 15 +++++++----
lib/kernel/test/logger_SUITE.erl | 27 ++++++++++++++------
4 files changed, 85 insertions(+), 23 deletions(-)
diff --git a/lib/kernel/doc/src/logger.xml b/lib/kernel/doc/src/logger.xml
index 239b9553b1..183102f240 100644
--- a/lib/kernel/doc/src/logger.xml
+++ b/lib/kernel/doc/src/logger.xml
@@ -645,11 +645,12 @@ start(_, []) ->
Set configuration data for the logger. This overwrites the
current logger configuration.
To modify the existing configuration,
- use set_logger_config/2
- , or read the current configuration
+ use
+ update_logger_config/1, or, if a more
+ complex merge is needed, read the current configuration
with get_logger_config/0
- , then merge in your added or updated
- associations before writing it back.
+ , then do the merge before writing the new
+ configuration back with this function.
If a key is removed compared to the current configuration,
the default value is used.
@@ -662,7 +663,23 @@ start(_, []) ->
Add or update configuration data for the logger. If the
given Key already exists, its associated
value will be changed to Value. If it
- doesn't exist, it will be added.
+ does not exist, it will be added.
+
+
+
+
+
+ Update configuration data for the logger.
+
+ Update configuration data for the logger. This function
+ behaves as if it was implemented as follows:
+
+{ok,Old} = logger:get_logger_config(),
+logger:set_logger_config(maps:merge(Old,Config)).
+
+ To overwrite the existing configuration without any merge,
+ use set_logger_config/1
+ .
@@ -673,11 +690,12 @@ start(_, []) ->
Set configuration data for the specified handler. This
overwrites the current handler configuration.
To modify the existing configuration,
- use set_handler_config/3
- , or read the current configuration
+ use
+ update_handler_config/2, or, if a more
+ complex merge is needed, read the current configuration
with get_handler_config/1
- , then merge in your added or updated
- associations before writing it back.
+ , then do the merge before writing the new
+ configuration back with this function.
If a key is removed compared to the current configuration,
and the key is know by Logger, the default value is used. If
it is a custom key, then it is up to the handler
@@ -694,11 +712,27 @@ start(_, []) ->
Add or update configuration data for the specified
handler. If the given Key already
exists, its associated value will be changed
- to Value. If it doesn't exist, it will
+ to Value. If it does not exist, it will
be added.
+
+
+ Update configuration data for the specified handler.
+
+ Update configuration data for the specified handler. This function
+ behaves as if it was implemented as follows:
+
+{ok,{_,Old}} = logger:get_handler_config(HandlerId),
+logger:set_handler_config(HandlerId,maps:merge(Old,Config)).
+
+ To overwrite the existing configuration without any merge,
+ use set_handler_config/2
+ .
+
+
+
Compare the severity of two log levels.
diff --git a/lib/kernel/src/logger.erl b/lib/kernel/src/logger.erl
index 2c7466fdf6..a839f97e62 100644
--- a/lib/kernel/src/logger.erl
+++ b/lib/kernel/src/logger.erl
@@ -40,6 +40,7 @@
set_module_level/2, reset_module_level/1,
set_logger_config/1, set_logger_config/2,
set_handler_config/2, set_handler_config/3,
+ update_logger_config/1, update_handler_config/2,
get_logger_config/0, get_handler_config/1,
add_handlers/1]).
@@ -361,6 +362,17 @@ set_handler_config(HandlerId,Key,Value) ->
set_handler_config(HandlerId,Config) ->
logger_server:set_config(HandlerId,Config).
+-spec update_logger_config(Config) -> ok | {error,term()} when
+ Config :: config().
+update_logger_config(Config) ->
+ logger_server:update_config(logger,Config).
+
+-spec update_handler_config(HandlerId,Config) -> ok | {error,term()} when
+ HandlerId :: handler_id(),
+ Config :: config().
+update_handler_config(HandlerId,Config) ->
+ logger_server:update_config(HandlerId,Config).
+
-spec get_logger_config() -> {ok,Config} when
Config :: config().
get_logger_config() ->
diff --git a/lib/kernel/src/logger_server.erl b/lib/kernel/src/logger_server.erl
index bd0c325f2b..275b9c476f 100644
--- a/lib/kernel/src/logger_server.erl
+++ b/lib/kernel/src/logger_server.erl
@@ -27,7 +27,7 @@
add_filter/2, remove_filter/2,
set_module_level/2, reset_module_level/1,
cache_module_level/1,
- set_config/2, set_config/3]).
+ set_config/2, set_config/3, update_config/2]).
%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
@@ -92,10 +92,7 @@ cache_module_level(Module) ->
set_config(Owner,Key,Value) ->
- case sanity_check(Owner,Key,Value) of
- ok -> call({update_config,Owner,#{Key=>Value}});
- Error -> Error
- end.
+ update_config(Owner,#{Key=>Value}).
set_config(Owner,Config0) ->
case sanity_check(Owner,Config0) of
@@ -106,6 +103,14 @@ set_config(Owner,Config0) ->
Error
end.
+update_config(Owner, Config) ->
+ case sanity_check(Owner,Config) of
+ ok ->
+ call({update_config,Owner,Config});
+ Error ->
+ Error
+ end.
+
%%%===================================================================
%%% gen_server callbacks
%%%===================================================================
diff --git a/lib/kernel/test/logger_SUITE.erl b/lib/kernel/test/logger_SUITE.erl
index 1b75d8278e..64968cbca2 100644
--- a/lib/kernel/test/logger_SUITE.erl
+++ b/lib/kernel/test/logger_SUITE.erl
@@ -227,15 +227,31 @@ change_config(_Config) ->
h1,#{conf_call=>fun() -> logger:set_module_level(?MODULE,debug) end}),
{ok,{?MODULE,C2}} = logger:get_handler_config(h1),
- %% Change one key only
+ %% Change handler config: Single key
{error,fail} = logger:set_handler_config(h1,conf_call,fun() -> {error,fail} end),
ok = logger:set_handler_config(h1,custom,custom),
[changing_config] = test_server:messages_get(),
{ok,{?MODULE,#{custom:=custom}=C3}} = logger:get_handler_config(h1),
C2 = maps:remove(custom,C3),
+ %% Change handler config: Map
+ ok = logger:update_handler_config(h1,#{custom=>new_custom}),
+ [changing_config] = test_server:messages_get(),
+ {ok,{_,C4}} = logger:get_handler_config(h1),
+ C4 = C3#{custom:=new_custom},
+
+ %% Change logger config: Single key
+ {ok,LConfig0} = logger:get_logger_config(),
+ ok = logger:set_logger_config(level,warning),
+ {ok,LConfig1} = logger:get_logger_config(),
+ LConfig1 = LConfig0#{level:=warning},
+
+ %% Change logger config: Map
+ ok = logger:update_logger_config(#{level=>error}),
+ {ok,LConfig2} = logger:get_logger_config(),
+ LConfig2 = LConfig1#{level:=error},
+
%% Overwrite logger config - check that defaults are added
- {ok,LConfig} = logger:get_logger_config(),
ok = logger:set_logger_config(#{filter_default=>stop}),
{ok,#{level:=info,filters:=[],filter_default:=stop}=LC1} =
logger:get_logger_config(),
@@ -246,13 +262,8 @@ change_config(_Config) ->
{ok,#{handlers:=HIds2}} = logger_config:get(?LOGGER_TABLE,logger),
HIds1 = lists:sort(HIds2),
- %% Change one key only
- ok = logger:set_logger_config(level,warning),
- {ok,#{level:=warning,filters:=[],filter_default:=stop}} =
- logger:get_logger_config(),
-
%% Cleanup
- ok = logger:set_logger_config(LConfig),
+ ok = logger:set_logger_config(LConfig0),
[] = test_server:messages_get(),
ok.
--
cgit v1.2.3