【问题标题】:erlang error_logger handler disappeared unexpectlyerlang错误记录器处理程序意外消失
【发布时间】:2013-05-31 13:45:36
【问题描述】:

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

【问题讨论】:

  • error_logger:info_report 为我解决了问题。
  • 你有没有考虑过用 basho 的啤酒代替默认的 error_logger?它更适合网络应用程序。 github.com/basho/lager

标签: erlang mochiweb


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    相关资源
    最近更新 更多