Как всегда регистрировать/показать причину ошибки, когда ребенок -супервайзер возвращает ошибку из start_link?
-
13-10-2019 - |
Вопрос
При запуске gen_server
от руководителя (который сам начинается с приложения) у меня есть проблема, когда start_link
Gen_Server не возвращается {ok, ...}
но {error, Reason}
Единственное сообщение об ошибке, которое я вижу, это:
=INFO REPORT==== 20-Jan-2011::13:14:43 ===
application: foo
exited: {shutdown,{foo_app,start,[normal,[]]}}
type: temporary
А Reason
что для завершения не показано/зарегистрировано.
Есть ли способ увидеть/зарегистрировать эту ошибку возвращается к руководителю?
Childspec, который я использую, например:
{ok, {{one_for_one, 3, 10}, ...
{usb_mux_1,
{usb_mux, start_link,
[Some_Params]},
permanent,
10000,
worker,
[usb_mux]}, ...
РЕДАКТИРОВАТЬ: разъяснение
Я знаю об error_logger и уже использую его. Вопрос не в том, как что -то зарегистрировать, а как заставить руководителя регистрировать причину его завершения, например, журнал, который прекратил возврат ошибки и что он вернулся.
И просто чтобы убрать это также с дороги, да, я начинаю Эрланг с Сасла на:
-boot start_sasl
Решение
Сам только что обнаружил ответ:
Супервайзер действительно регистрирует выход ошибки в качестве отчета об аварии.
Проблема в том, что оболочка не показывает эти отчеты об аварии. Просто чтобы сбить меня с толку, это показывает информацию/предупреждение и отчеты о ошибках, но нет отчетов о прогнозах и отчетов о сбоях от руководителя.
Если я посмотрю в журнале дисков, там есть подробный отчет о сбое:
10> rb:show(4).
CRASH REPORT <0.53.0> 2011-01-20 17:33:52
===============================================================================
Crashing process
initial_call {usb_mux,init,['Argument__1']}
pid <0.53.0>
registered_name []
error_info
{exit,{undef,[{usb_port,get_gw_hw_spec,[<0.59.0>]},
...
Причина, по которой события SASL не были показаны на экране, была домиссия в -config
Файл, который выглядел так:
[{sasl, [
{sasl_error_logger, false}, %% no SASL error logger installed
{error_logger_mf_dir,"./log"},
{error_logger_mf_maxbytes,10485760}, % 10 MB
{error_logger_mf_maxfiles, 10}
]}].
Означало, что была многофильная инсталляция Erroro Logger (все error_logger_mf_*
записи), но нет на экране регистратора для событий SASL.
Изменение записи, как это, исправило его:
{sasl_error_logger, tty}, %% SASL reports to tty
Из The Sasl Manpage:
sasl_report_tty_h:
Форматы и пишет отчеты супервизора, отчеты об аварии и отчеты о прогрессе в Stdio.