error_logger "тупик" проблема - PullRequest
0 голосов
/ 12 апреля 2011

Я добавил обработчик событий для перенаправления отчетов error_logger в системный журнал.Обработчик выглядит так:

handle_event({info_msg, _Gleader, {_Pid, Format, Data}}, #state{info_logger=Logger}=State) ->
    syslog_write("I", Logger, Format, Data),
    {ok, State};
handle_event({error, _Gleader, {_Pid, Format, Data}}, #state{error_logger=Logger}=State) ->
    syslog_write("E", Logger, Format, Data),
    {ok, State};
handle_event(_Event, State) ->
    {ok, State}.

syslog_write(Prefix, Facility, Format, Data) ->
    Cmd = try
              Message = lists:flatten(io_lib:format(Format, Data)),
              lists:flatten(io_lib:format("logger -t essmsd -p ~s.Debug \'<~s> ~s\'",
                                           [Facility, Prefix, Message]))
          catch 
              _:_ ->
                  lists:flatten(io_lib:format("logger -t essmsd -p ~s.Debug \'~p\'", 
                                              [Facility, [Prefix, Format, Data]]))
          end,
    os:cmd(Cmd).

Я использовал команду logger для записи в файлы системного журнала.Сначала он работает, но после запуска в течение одного или двух дней перестал работать error_logger.Он ничего не выводит (когда я вызываю error_logger: info_msg («test») на консоли, он только возвращает ok), независимо от того, что ввод, ни в файл журнала, ни в консоль.

Есть предложения?спасибо заранее.

обновление: я поместил трассировки в syslog_write и error_logger: info_msg, и получил следующее:

(essmsd@xx.xx.xx.xx)11> dbg:tracer(), dbg:p(all, c), dbg:tpl(error_logger, info_msg, x). {ok,[{matched,'essmsd@xx.xx.xx.xx',2},{saved,x}]} 

(essmsd@xx.xx.xx.xx)12> error_logger:info_msg("xx"). 
ok 
(<0.1735.0>) call error_logger:info_msg("xx") 

(essmsd@xx.xx.xx.xx)13> 
(<0.1735.0>) call error_logger:info_msg("xx",[]) 
(<0.1735.0>) returned from error_logger:info_msg/2 -> ok 
(<0.1735.0>) returned from error_logger:info_msg/1 -> ok 

Что означает, что вызывается error_logger: info_msg, но это никогдавывести что угодно, но вернул ок!

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

Вопрос в следующем:

Останавливает ли error_logger обработку сообщений или ваш syslogd вызывает проблемы?

Вам необходимо отладить его, если у вас есть система, в которой он уже перестал работать:

dbg:tracer(),dbg:p(all,c),dbg:tpl(Mod,Func,x)

Для всех соответствующих функций вашего модуля в оболочке, подключенной к вашему узлу.

Подробнее см. Как улучшить отладку? и Использование трассировкии dbg в Erlang .

Тогда вы можете увидеть, что на самом деле происходит, и если ваша функция syslog_write все еще вызывается и с какими параметрами.

Кстати, что иногда может быть причиной для syslog«проблемы»: когда вы смотрите на файл журнала с помощью less или tail и продолжаете его работать.Затем, как только файлы журналов будут повернуты, у вас все еще будет открыт старый файл, и похоже, что регистрация просто остановилась.На самом деле это другой файл.

0 голосов
/ 18 апреля 2011

Я нашел проблему: Когда у меня есть пустое сообщение, у меня всегда есть команда logger!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...