当主管子进程从start_link返回错误时,如何始终记录/显示错误原因?

时间:2011-01-20 14:23:42

标签: erlang otp supervisor gen-server

从主管(它本身是由应用程序启动)启动gen_server时,我遇到的问题是,当gen_server的start_link没有返回{ok, ...}但是{ {1}}我看到的唯一错误信息是:

{error, Reason}

未显示/记录终止的=INFO REPORT==== 20-Jan-2011::13:14:43 === application: foo exited: {shutdown,{foo_app,start,[normal,[]]}} type: temporary

有没有办法查看/记录这些错误返回给主管?

我正在使用的childspec就是例如:

Reason

修改:澄清

我了解error_logger并已使用它。问题不在于如何记录某些内容,而是如何让主管记录终止记录的原因,例如:记录以错误返回结束的日志以及返回的内容。

只是为了让这个也开始了,是的,我开始使用sasl的erlang:

{ok, {{one_for_one, 3, 10},  ... 
    {usb_mux_1, 
    {usb_mux, start_link, 
    [Some_Params]},
    permanent, 
    10000, 
    worker, 
    [usb_mux]}, ...

1 个答案:

答案 0 :(得分:3)

我自己发现了答案:

主管确实将错误退出记录为崩溃报告。

问题是shell没有显示这些崩溃报告。只是为了让我感到困惑,它显示了信息/警告和错误报告,但没有来自主管的progess报告和崩溃报告。

如果我查看磁盘日志,那里会有详细的崩溃报告:

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 installen(所有error_logger_mf_*条目)但没有用于SASL事件的屏幕记录器。

更改这样的条目修复它:

     {sasl_error_logger, tty},  %% SASL reports to tty

来自sasl联机帮助页:

  

<强> sasl_report_tty_h:

     

将主管报告,崩溃报告和进度报告格式化并写入stdio。