Запуск браузера отчетов (rb) для отчетов об ошибках SASL в удаленной оболочке

Ребята, мы сейчас развертываем много экземпляров Erlang, и мы видим, что выбрасываются ошибки, и хотели бы их изучить...

Обычно мы подключаемся к работающему экземпляру с удаленной оболочкой и таким образом получаем доступ к консоли Erlang, но это не работает для rb или сообщений об ошибках...

Как получить удаленный доступ к моим сообщениям об ошибках SASL, не отключая сервер, не запуская его в неотсоединенном состоянии и не глядя на оболочку?


person Gordon Guthrie    schedule 01.03.2010    source источник


Ответы (3)


Я столкнулся с этим еще в R11B и в итоге создал клон rb, который работает через удаленную оболочку (http://github.com/archaelus/erms/blob/master/src/erms_rb.erl). Хитрость заключается в том, чтобы обнаружить group_leader группы вызывающий объект, а затем отправить вывод туда.

Я, вероятно, должен привести это в порядок и отправить как патч в rb.

person archaelus    schedule 01.03.2010

Я запускаю свою удаленную оболочку через -remsh (${ROOTDIR}/bin/erl -name shell@${NODE_IP} -remsh ${NODE_NAME}). как только я устанавливаю rb_server group_leader в текущий group_leader оболочки, и отныне rb печатает свой вывод в активную оболочку:

([email protected])1> rb:start().
{ok,<0.213.0>}
([email protected])2> group_leader(group_leader(),erlang:whereis(rb_server)).
true
([email protected])3> rb:show(1).

PROGRESS REPORT  <0.77.0>                                   2011-01-28 17:49:23
===============================================================================
supervisor                                                     {local,sasl_sup}
started
         [{pid,<4543.96.0>},
         {name,rb_server},
         {mfargs,{rb,start_link,[[]]}},
         {restart_type,temporary},
         {shutdown,brutal_kill},
         {child_type,worker}]

ok
([email protected])4> 

РЕДАКТИРОВАТЬ: для удобства инкапсулируйте его в функцию:

%% @doc Start the report browser and reset its group-leader. 
%% For use in a remote shell
start_remote_rb() ->
    {ok, Pid} = rb:start(),
    true = erlang:group_leader(erlang:group_leader(), Pid),
    ok.

С уважением, Том

person Tom Regner    schedule 28.01.2011
comment
Привет Том. Я задавал этот вопрос так давно, что уже не могу вспомнить, как мы это делаем. Я думаю, что мы используем пропатченный сервер Archaeus RB :( - person Gordon Guthrie; 30.01.2011
comment
Да, я так и думал, но, тем не менее, решил добавить его сюда, чтобы следующий поисковый парень также нашел этот метод. - person Tom Regner; 02.02.2011

Я не использовал rb, поэтому мало что о нем знаю, но, возможно, это вам все равно поможет:

Вы можете настроить обработчик отчетов об ошибках SASL для записи на диск, см. http://www.erlang.org/doc/man/sasl_app.html :

sasl_error_logger = Value <optional>

Value является одним из:

...

{file,FileName}

Устанавливает sasl_report_file_h в журнал ошибок. При этом все отчеты отправляются в файл FileName. FileName — это строка.

...

Я также смутно помню, что был способ установить пользовательский обратный вызов обработчика, но, к сожалению, я не могу найти его прямо сейчас.

person Jonathan Ringstad    schedule 02.03.2010