Как всегда регистрировать/показать причину ошибки, когда ребенок -супервайзер возвращает ошибку из start_link?

StackOverflow https://stackoverflow.com/questions/4748257

Вопрос

При запуске 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top