Cómo iniciar sesión siempre / mostrar la razón de error cuando un error del supervisor niño regresa de START_LINK?

StackOverflow https://stackoverflow.com/questions/4748257

Pregunta

Al iniciar gen_server de de un supervisor (que a su vez se inicia por una aplicación) tengo el problema de que cuando el start_link del gen_server no vuelve {ok, ...} pero {error, Reason} el único mensaje de error que veo es:

=INFO REPORT==== 20-Jan-2011::13:14:43 ===
    application: foo
    exited: {shutdown,{foo_app,start,[normal,[]]}}
    type: temporary

El Reason que por terminación no se muestra / registrado.

¿Hay una manera de ver / log estos retornos de error al supervisor?

El childspec que estoy usando es por ejemplo:.

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

Editar: Aclaración

Me sabe de error_logger y usarlo ya. La cuestión no es cómo conseguir algo, pero registra cómo conseguir el supervisor para registrar la razón de que la terminación, por ejemplo, log que termina con un retorno de error y lo que no lo devuelva.

Y sólo para conseguir esto también fuera del camino, sí que empiezo Erlang con SASL en:

 -boot start_sasl
¿Fue útil?

Solución

Así descubrió la respuesta a mí mismo:

El supervisor está realmente registrando la salida de error que informe de bloqueo.

El problema es el shell no muestra estos informes de fallos. Sólo para confundirla muestra informes de información / advertencia y error, pero no hay informes progess e informes de errores desde el supervisor.

Si miro en el registro en el disco hay un informe detallado accidente no:

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

La razón de los acontecimientos SASL no se muestran en la pantalla era una omisión en el archivo -config, que veía así:

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

Significado hubo un multi-archivo erroro registrador installen (todas las entradas error_logger_mf_*), pero no en la pantalla del registrador de eventos SASL.

Cambio de la entrada como esta fijado que:

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

Desde la página de manual sasl:

sasl_report_tty_h:

Formatos y escribe informes supervisor, informes de fallos o informes de progreso a stdio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top