cth_log_redirect_any_domains: common_test hook to handle domain-specific log messages
common_test installs its own logger handler, which is great. Unfortunately, this logger handler drops all messages having a domain, except when the domain is among the domains used by Erlang itself. In RabbitMQ, we use logger domains to categorize messages. Therefore those messages are dropped by the common_test's logger handler. This commit introduces another logger handler which sits on top of the common_test one and makes sure messages with a domain are logged as well.
This commit is contained in:
parent
bcb8733880
commit
cefb6aaef5
|
|
@ -21,6 +21,8 @@
|
|||
!/deps/rabbitmq_cli/
|
||||
!/deps/rabbitmq_codegen/
|
||||
!/deps/rabbitmq_consistent_hash_exchange/
|
||||
!/deps/rabbitmq_ct_helpers/
|
||||
!/deps/rabbitmq_ct_client_helpers/
|
||||
!/deps/rabbitmq_event_exchange/
|
||||
!/deps/rabbitmq_federation/
|
||||
!/deps/rabbitmq_federation_management/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,23 @@
|
|||
-module(cth_log_redirect_any_domains).
|
||||
|
||||
-export([log/2]).
|
||||
|
||||
-define(BACKEND_MODULE, cth_log_redirect).
|
||||
|
||||
%% Reversed behavior compared to `cth_log_redirect': log events with an
|
||||
%% unknown domain are sent to the `cth_log_redirect' server, others are
|
||||
%% dropped (as they are already handled by `cth_log_redirect').
|
||||
log(#{msg:={report,_Msg},meta:=#{domain:=[otp,sasl]}},_Config) ->
|
||||
ok;
|
||||
log(#{meta:=#{domain:=[otp]}},_Config) ->
|
||||
ok;
|
||||
log(#{meta:=#{domain:=_}}=Log,Config) ->
|
||||
do_log(add_log_category(Log,error_logger),Config);
|
||||
log(_Log,_Config) ->
|
||||
ok.
|
||||
|
||||
add_log_category(#{meta:=Meta}=Log,Category) ->
|
||||
Log#{meta=>Meta#{?BACKEND_MODULE=>#{category=>Category}}}.
|
||||
|
||||
do_log(Log,Config) ->
|
||||
gen_server:call(?BACKEND_MODULE,{log,Log,Config}).
|
||||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
-module(rabbit_ct_helpers).
|
||||
|
||||
-include_lib("kernel/include/logger.hrl").
|
||||
-include_lib("common_test/include/ct.hrl").
|
||||
|
||||
-deprecated({is_mixed_versions,1,"Use is_mixed_versions/0 instead"}).
|
||||
|
|
@ -26,6 +27,7 @@
|
|||
load_rabbitmqctl_app/1,
|
||||
ensure_rabbitmq_plugins_cmd/1,
|
||||
ensure_rabbitmq_queues_cmd/1,
|
||||
redirect_logger_to_ct_logs/1,
|
||||
init_skip_as_error_flag/1,
|
||||
start_long_running_testsuite_monitor/1,
|
||||
stop_long_running_testsuite_monitor/1,
|
||||
|
|
@ -155,6 +157,34 @@ run_steps(Config, [Step | Rest]) ->
|
|||
run_steps(Config, []) ->
|
||||
Config.
|
||||
|
||||
redirect_logger_to_ct_logs(Config) ->
|
||||
ct:pal(
|
||||
?LOW_IMPORTANCE,
|
||||
"Configuring logger to send logs to common_test logs"),
|
||||
logger:set_handler_config(cth_log_redirect, level, debug),
|
||||
|
||||
%% Let's use the same format as RabbitMQ itself.
|
||||
logger:set_handler_config(
|
||||
cth_log_redirect, formatter,
|
||||
rabbit_prelaunch_early_logging:default_file_formatter(#{})),
|
||||
|
||||
%% We use an addition logger handler for messages tagged with a non-OTP
|
||||
%% domain because by default, `cth_log_redirect' drop them.
|
||||
{ok, LogCfg0} = logger:get_handler_config(cth_log_redirect),
|
||||
LogCfg = maps:remove(id, maps:remove(module, LogCfg0)),
|
||||
ok = logger:add_handler(
|
||||
cth_log_redirect_any_domains, cth_log_redirect_any_domains,
|
||||
LogCfg),
|
||||
|
||||
logger:remove_handler(default),
|
||||
|
||||
ct:pal(
|
||||
?LOW_IMPORTANCE,
|
||||
"Logger configured to send logs to common_test logs; you should see "
|
||||
"a message below saying so"),
|
||||
?LOG_INFO("Logger message logged to common_test logs"),
|
||||
Config.
|
||||
|
||||
init_skip_as_error_flag(Config) ->
|
||||
SkipAsError = case os:getenv("RABBITMQ_CT_SKIP_AS_ERROR") of
|
||||
false -> false;
|
||||
|
|
|
|||
Loading…
Reference in New Issue