Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions lib/kernel/src/logger.erl
Original file line number Diff line number Diff line change
Expand Up @@ -1084,23 +1084,24 @@ get_primary_config() ->
Config :: logger_handler:config().
get_handler_config(HandlerId) ->
case logger_config:get(?LOGGER_TABLE,HandlerId) of
{ok,#{module:=Module}=Config} ->
{ok,try Module:filter_config(Config)
catch _:_ -> Config
end};
{ok, Config} ->
{ok, filter_config(Config)};
Error ->
Error
end.

filter_config(#{module:=Module}=Config) ->
try Module:filter_config(Config)
catch _:_ -> Config
end.

-doc "Look up the current configuration for all handlers.".
-doc(#{group => <<"Configuration API functions">>,since => <<"OTP 21.0">>}).
-spec get_handler_config() -> [Config] when
Config :: logger_handler:config().
get_handler_config() ->
[begin
{ok,Config} = get_handler_config(HandlerId),
Config
end || HandlerId <- get_handler_ids()].
Configs = logger_config:get(?LOGGER_TABLE),
[filter_config(Config) || Config <- Configs].

-doc "Look up the identities for all installed handlers.".
-doc(#{group => <<"Configuration API functions">>,since => <<"OTP 21.0">>}).
Expand Down
6 changes: 5 additions & 1 deletion lib/kernel/src/logger_config.erl
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
-export([new/1,delete/2,
exist/2,
allow/1,allow/2,
get/2, get/3,
get/1, get/2, get/3,
create/3, set/3,
set_module_level/2,unset_module_level/1,
get_module_level/0,
Expand Down Expand Up @@ -90,6 +90,10 @@ exist(Tid,What) ->
get_primary_level() ->
persistent_term:get({?MODULE,?PRIMARY_KEY},?NOTICE).

get(Tid) ->
Configs = ets:match(Tid, {{?HANDLER_KEY, '_'}, '$1'}),
lists:flatten(Configs).

get(Tid,What) ->
case ets:lookup(Tid,table_key(What)) of
[{_,Config}] ->
Expand Down
25 changes: 25 additions & 0 deletions lib/kernel/test/logger_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ all() ->
multiple_handlers,
add_remove_filter,
change_config,
get_config_error,
set_formatter,
log_no_levels,
log_all_levels_api,
Expand Down Expand Up @@ -298,6 +299,30 @@ change_config(cleanup,Config) ->
logger:set_primary_config(PC),
ok.

get_config_error(_Config) ->
Self = self(),
register(callback_receiver,Self),
HandlerCnt = 2000,
HandlerIds = [list_to_atom("handler-"++integer_to_list(Idx)) || Idx <- lists:seq(1,HandlerCnt)],
[ok = logger:add_handler(HId,?MODULE,#{}) || HId <- HandlerIds],
RemoveFun = fun () ->
Self ! started,
[ok = logger:remove_handler(HId) || HId <- HandlerIds],
Self ! removed
end,
Remove = spawn(RemoveFun),
receive
started -> ok
end,
?assertNotException(_, _, logger:get_handler_config()),
%% Just to make sure RemoveFun did not die before.
%% If line below fails please raise HandlerCnt by factor of 2
?assert(erlang:is_process_alive(Remove)),
receive
removed -> ok
end,
ok.

set_formatter(_Config) ->
{error,{not_found,h1}}=logger:set_handler_config(h1,formatter,{?MODULE,[]}),
ok = logger:add_handler(h1,?MODULE,#{level=>notice,filter_default=>log}),
Expand Down
Loading