erlang - error_logger "deadlock" problem -
i added event handler redirect error_logger reports syslog. handler looks this:
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). i used logger command write syslog files. works @ first, after running 1 or 2 days, error_logger stopped working. outputs nothing (when invoke error_logger:info_msg("test") on console, returns ok) no matter input, neither log file, nor console.
any suggestions? thx in advance.
update: put traces in syslog_write , error_logger:info_msg, , got following:
(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 error_logger:info_msg/2 -> ok (<0.1735.0>) returned error_logger:info_msg/1 -> ok which means error_logger:info_msg being called, never output returned ok!
the question is:
does error_logger stop handling messages or syslogd cause problems?
you need debug it, if have system stopped working use:
dbg:tracer(),dbg:p(all,c),dbg:tpl(mod,func,x) for relevant functions in module on shell connected node.
for details see how refine debugging? , using trace , dbg in erlang.
then can see happeing , if syslog_write function still called , parameters.
btw can reason syslog "problems": when @ log file less or tail , keep running. once log files rotated still have old file open , looks logging stopped. in reality going different file.
Comments
Post a Comment