【问题标题】:How to always log/show the error reason when a supervisor child returns error from start_link?当主管子从 start_link 返回错误时,如何始终记录/显示错误原因?
【发布时间】:2011-06-12 12:08:39
【问题描述】:

当从主管启动 gen_server 时(它本身是由应用程序启动的)我遇到的问题是,当 gen_server 的 start_link 不返回 {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 并且已经在使用它。问题不是如何记录某些内容,而是如何让主管记录它终止的原因,例如记录谁因错误返回而终止以及它返回了什么。

为了解决这个问题,是的,我用 sasl 启动 erlang:

 -boot start_sasl

【问题讨论】:

    标签: erlang erlang-otp erlang-supervisor gen-server


    【解决方案1】:

    我自己发现了答案:

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

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

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

    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}
         ]}].
    

    意味着安装了多文件错误记录器(所有error_logger_mf_* 条目),但没有用于 SASL 事件的屏幕记录器。

    像这样更改条目修复它:

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

    来自 sasl 手册页:

    sasl_report_tty_h:

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

    【讨论】:

      猜你喜欢
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      相关资源
      最近更新 更多