Я добавил обработчик событий для перенаправления отчетов 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, но это никогдавывести что угодно, но вернул ок!