2

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

只是为了解决这个问题,是的,我用 sasl 开始 erlang:

 -boot start_sasl
4

1 回答 1

3

刚刚自己发现了答案:

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

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

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

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 。

于 2011-01-20T16:42:02.457 回答