Как завершить gen_server изящно без отчета о сбое
В моем gen_server я заканчиваю это так:
handle_info({'EXIT', _From, _Reason}, State) ->
{stop, partner_fled, State};
Но все равно логгер выводит это как ошибку
14:56:43.349 [error] gen_server <0.3290.0> terminated with reason: partner_fled
14:56:43.349 [error] CRASH REPORT Process <0.3290.0> with 0 neighbours exited with reason: partner_fled in gen_server:terminate/7 line 812
Код работает так, как задумано, но я не хочу, чтобы регистратор выводил его как изящное завершение.
Кстати, я использую лагер, но я думаю, что его удаление только изменит формат регистрации.
1 ответ
Решение
Из руководства:
Обратите внимание, что по любой другой причине, кроме
normal
,shutdown
, или же{shutdown,Term}
,gen_server
предполагается, что процесс завершается из-за ошибки, и отчет об ошибке выдается с использованиемerror_logger:format/2
,
Таким образом, если вы не хотите, чтобы какой-либо отчет об ошибке печатался, вы можете изменить причину на normal
или же shutdown
или если вы хотите вернуть пользовательский термин, {shutdown, Term}
,
handle_info({'EXIT', _From, _Reason}, State) ->
{stop, {shutdown, partner_fled}, State};