erlang error_logger处理程序意外消失了

时间:2012-08-16 07:01:10

标签: erlang mochiweb

我有一个基于mochiweb的应用程序。 我在启动应用程序时指定了-kernel error_logger'{file,“mylog.log”}',运行一段时间后,error_logger将不会输出任何内容。 应用程序启动时,

sys:get_status(EPID).
{status,<0.5.0>,
        {module,gen_event},
        [[{'$ancestors',[<0.2.0>]},
          {'$initial_call',{gen_event,init_it,6}}],
         running,<0.2.0>,[],
         [{header,"Status for event handler error_logger"},
          {data,[{"Status",running},{"Parent",<0.2.0>}]},
          {items,{"Installed handlers",
                  [{handler,sasl_report_tty_h,false,all,false},
                   {handler,error_logger,false,[],false},
                   {handler,error_logger_file_h,false,
                            {<0.35.0>,"mylog.log",error_logger},
                            false}]}}]]}

过了一段时间,

sys:get_status(EPID).
{status,<0.5.0>,
        {module,gen_event},
        [[{'$ancestors',[<0.2.0>]},
          {'$initial_call',{gen_event,init_it,6}}],
         running,<0.2.0>,[],
         [{header,"Status for event handler error_logger"},
          {data,[{"Status",running},{"Parent",<0.2.0>}]},
          {items,{"Installed handlers",
                  [{handler,sasl_report_tty_h,false,all,false},
                   {handler,error_logger,false,[],false}]}}]]}

缺少error_logger_file_h。为什么呢?

1 个答案:

答案 0 :(得分:0)

基于gen_event的任何事情,例如error_logger,需要注意的是,如果任何回调导致异常,则会以静默方式删除event_handler。可以通过提供使用终止回调或添加受监督的event_handler来确保通知一个。但是,error_logger中没有这些解决方案。因此,如果您不得不依赖于存在的处理程序,那么使用其他一些日志框架或滚动自己的框架可能是最好的解决方案。