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

Popular posts from this blog

php - What is the difference between $_SERVER['PATH_INFO'] and $_SERVER['ORIG_PATH_INFO']? -

fortran - Function return type mismatch -

queue - mq_receive: message too long -