summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Vatamaniuc <vatamane@gmail.com>2021-04-28 12:55:35 -0400
committerNick Vatamaniuc <vatamane@gmail.com>2021-04-28 12:55:35 -0400
commita757f52908e88583f52e8a92572f40f5cfdc4318 (patch)
treed998a341eb628bb96854718f30505ab55f8e7ea3
parentff2242c5f90fd307eb5df52bc09952b1e580e3f2 (diff)
downloadcouchdb-add-error-logger-only-once.tar.gz
Install only one couch log error handleradd-error-logger-only-once
Previously we installed two of them, one through the `error_logger:add_report_handler/1` call and another through the `gen_event:add_sup_handler/3`. The first one was to setup `logger` handler, but the second was was still needed so we're notified if event manager died. The fix is to do what `error_logger:add_handler/1` does [1] and instead of calling the `gen_event:add_handler/3`, call `gen_server:add_sup_handler/3`. [1] https://github.com/erlang/otp/blob/40922798411c2d23ee8a99456f96d6637c62b762/lib/kernel/src/error_logger.erl#L453-L455
-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