File 2795-logger-Make-handler-level-use-persistent_term.patch of Package erlang
From 7292eae13a0a78dd44fb3bda78cf202df373a4ad Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erlang.org>
Date: Fri, 6 Sep 2019 12:27:47 +0200
Subject: [PATCH 5/7] logger: Make handler level use persistent_term
---
lib/kernel/src/logger_config.erl | 41 ++++++++++++++++++++--------------------
lib/kernel/test/logger_SUITE.erl | 4 ++--
2 files changed, 22 insertions(+), 23 deletions(-)
diff --git a/lib/kernel/src/logger_config.erl b/lib/kernel/src/logger_config.erl
index 31b5480cde..5c393d0ed3 100644
--- a/lib/kernel/src/logger_config.erl
+++ b/lib/kernel/src/logger_config.erl
@@ -89,51 +89,50 @@ get_primary_level() ->
get(Tid,What) ->
case ets:lookup(Tid,table_key(What)) of
- [{_,_,Config}] ->
- {ok,Config};
- [{_,Config}] when What=:=proxy ->
+ [{_,Config}] ->
{ok,Config};
[] ->
{error,{not_found,What}}
end.
get(Tid,What,Level) ->
- MS = [{{table_key(What),'$1','$2'},
- [{'>=','$1',level_to_int(Level)}],
- ['$2']}],
- case ets:select(Tid,MS) of
- [] -> error;
- [Data] -> {ok,Data}
+ TableKey = table_key(What),
+ case persistent_term:get({?MODULE,TableKey},undefined) of
+ undefined ->
+ %% The handler is not installed at the moment
+ {error,{not_found,What}};
+ ConfLevel ->
+ case less_or_equal_level(Level,ConfLevel) of
+ true ->
+ get(Tid, What);
+ false ->
+ error
+ end
end.
create(Tid,proxy,Config) ->
ets:insert(Tid,{table_key(proxy),Config});
create(Tid,What,Config) ->
LevelInt = level_to_int(maps:get(level,Config)),
- case What of
- primary ->
- ok = persistent_term:put({?MODULE,?PRIMARY_KEY}, LevelInt);
- _ ->
- ok
- end,
- ets:insert(Tid,{table_key(What),LevelInt,Config}).
+ ok = persistent_term:put({?MODULE,table_key(What)}, LevelInt),
+ ets:insert(Tid,{table_key(What),Config}).
set(Tid,proxy,Config) ->
ets:insert(Tid,{table_key(proxy),Config}),
ok;
set(Tid,What,Config) ->
LevelInt = level_to_int(maps:get(level,Config)),
+ ok = persistent_term:put({?MODULE,table_key(What)}, LevelInt),
case What of
primary ->
- ok = persistent_term:put({?MODULE,?PRIMARY_KEY}, LevelInt),
- [persistent_term:put(Key, ?PRIMARY_TO_CACHE(LevelInt))
- || {{?MODULE, Module} = Key,L} <- persistent_term:get(),
- Module =/= ?PRIMARY_KEY, L > ?LOG_ALL],
+ [persistent_term:put(Key,?PRIMARY_TO_CACHE(LevelInt))
+ || {{?MODULE,Module} = Key,Level} <- persistent_term:get(),
+ ?IS_MODULE(Module), ?IS_CACHED(Level)],
ok;
_ ->
ok
end,
- ets:update_element(Tid,table_key(What),[{2,LevelInt},{3,Config}]),
+ ets:insert(Tid,{table_key(What),Config}),
ok.
set_module_level(_Tid,Modules,Level) ->
diff --git a/lib/kernel/test/logger_SUITE.erl b/lib/kernel/test/logger_SUITE.erl
index c6b563e4a9..2e101a388d 100644
--- a/lib/kernel/test/logger_SUITE.erl
+++ b/lib/kernel/test/logger_SUITE.erl
@@ -276,7 +276,7 @@ change_config(_Config) ->
logger:get_primary_config(),
3 = maps:size(PC1),
%% Check that internal 'handlers' field has not been changed
- MS = [{{{?HANDLER_KEY,'$1'},'_','_'},[],['$1']}],
+ MS = [{{{?HANDLER_KEY,'$1'},'_'},[],['$1']}],
HIds1 = lists:sort(ets:select(?LOGGER_TABLE,MS)), % dirty, internal data
HIds2 = lists:sort(logger:get_handler_ids()),
HIds1 = HIds2,
@@ -1147,7 +1147,7 @@ kernel_config(Config) ->
ok.
-pretty_print(Config) ->
+pretty_print(_Config) ->
ok = logger:add_handler(?FUNCTION_NAME,logger_std_h,#{}),
ok = logger:set_module_level([module1,module2],debug),
--
2.16.4