2011-01-20 13 views
2

當從上級開始gen_server的(它本身是由應用程序啓動)這個問題我已經當gen_server的start_link不返回{ok, ...}{error, Reason}唯一的錯誤消息,我看到的是:當主管孩子從start_link返回錯誤時,如何總是記錄/顯示錯誤原因?

=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上:

-boot start_sasl 

回答

3

剛剛發現自己的答案:

監督員真的記錄錯誤退出的崩潰報告。

問題是shell不顯示這些崩潰報告。只是爲了讓我困惑,它顯示了信息/警告和錯誤報告,但沒有來自主管的報告和崩潰報告。

如果我看在磁盤上的日誌有詳細崩潰報告有:

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文件ommission究其原因,這看上去像這樣:

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

含義有installen多文件erroro記錄器(所有error_logger_mf_*項),但沒有在屏幕上記錄的SASL事件。

改變這樣的條目固定它:

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

從SASL手冊頁:

sasl_report_tty_h:

格式和寫入的主管報告,崩潰報告和進度報道stdio。