1

我有一个基于 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。为什么?

4

1 回答 1

0

对于基于 gen_event 的任何内容(例如 error_logger),需要注意的是,如果任何回调导致异常,则 event_handler 会被静默删除。可以通过使用终止回调或添加受监督的 event_handler 来确保通知一个人。然而,这些解决方案在 error_logger 中均不可用。因此,如果您必须依赖存在的处理程序,则使用其他一些日志记录框架或滚动您自己的可能是最好的解决方案。

于 2013-05-31T05:45:36.887 回答