summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/couch_log/src/couch_log_monitor.erl8
-rw-r--r--src/couch_log/test/eunit/couch_log_config_listener_test.erl7
2 files changed, 12 insertions, 3 deletions
diff --git a/src/couch_log/src/couch_log_monitor.erl b/src/couch_log/src/couch_log_monitor.erl
index 96d7f3698..d7620e290 100644
--- a/src/couch_log/src/couch_log_monitor.erl
+++ b/src/couch_log/src/couch_log_monitor.erl
@@ -41,8 +41,12 @@ start_link() ->
-ifdef(OTP_RELEASE).
init(_) ->
- % see https://erlang.org/doc/man/error_logger.html#add_report_handler-1
- ok = error_logger:add_report_handler(?HANDLER_MOD),
+ % See https://erlang.org/doc/man/error_logger.html#add_report_handler-1
+ % however that call doesn't call a supervised handler so we do the same
+ % thing add_report_handler/1 does but call gen_event:add_sup_handler/3
+ % instead of gen_event:add_handler/3.
+ Opts = #{level => info, filter_default => log},
+ _ = logger:add_handler(error_logger, error_logger, Opts),
ok = gen_event:add_sup_handler(error_logger, ?HANDLER_MOD, []),
{ok, nil}.
diff --git a/src/couch_log/test/eunit/couch_log_config_listener_test.erl b/src/couch_log/test/eunit/couch_log_config_listener_test.erl
index 07abae1ff..042066e5d 100644
--- a/src/couch_log/test/eunit/couch_log_config_listener_test.erl
+++ b/src/couch_log/test/eunit/couch_log_config_listener_test.erl
@@ -24,7 +24,8 @@ couch_log_config_test_() ->
fun couch_log_test_util:stop/1,
[
fun check_restart_listener/0,
- fun check_ignore_non_log/0
+ fun check_ignore_non_log/0,
+ fun check_only_one_couch_error_handler/0
]
}.
@@ -67,6 +68,10 @@ check_ignore_non_log() ->
end,
?assertError(config_change_timeout, Run()).
+check_only_one_couch_error_handler() ->
+ Handlers = gen_event:which_handlers(error_logger),
+ CouchHandlers = [H || H <- Handlers, H =:= couch_log_error_logger_h],
+ ?assertEqual(1, length(CouchHandlers)).
get_handler() ->
FoldFun = fun