2

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ものは表示/ログに記録されません。

これらのエラーがスーパーバイザーに返されるのを確認/記録する方法はありますか?

私が使用している子仕様は、例えば次のとおりです。

{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 に答える