代码之家  ›  专栏  ›  技术社区  ›  Gordon Guthrie

在远程shell中运行sasl错误报告的报告浏览器(rb)

  •  3
  • Gordon Guthrie  · 技术社区  · 15 年前

    各位,我们现在正在部署大量的erlang实例,我们看到错误被抛出,希望检查它们…

    通常,我们使用远程shell连接到正在运行的实例,并通过这种方式访问erlang控制台,但这对于rb或错误消息不起作用……

    如何在不删除服务器、不分离服务器并查看shell的情况下远程访问sasl错误消息?

    3 回复  |  直到 14 年前
        1
  •  4
  •   archaelus    15 年前

    我在r11b中遇到这个问题,最终创建了一个rb的克隆,它可以在远程shell上工作( http://github.com/archaelus/erms/blob/master/src/erms_rb.erl )诀窍是 discover the group_leader caller 然后 send output there .

    我应该把它整理一下,作为补丁提交给rb。

        2
  •  2
  •   Tom Regner    14 年前

    我通过-remsh启动远程shell( ${ROOTDIR}/bin/erl -name shell@${NODE_IP} -remsh ${NODE_NAME} )在那里,我将rb_u服务器group_leader设置为shell的当前group戋leader,然后rb将其输出打印到活动shell:

    (cacherl@192.168.2.31)1> rb:start().
    {ok,<0.213.0>}
    (cacherl@192.168.2.31)2> group_leader(group_leader(),erlang:whereis(rb_server)).
    true
    (cacherl@192.168.2.31)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
    (cacherl@192.168.2.31)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.
    

    当做, 汤姆

        3
  •  1
  •   Jonathan Ringstad    15 年前

    我没有用过rb,所以我不太了解它,但也许这对你有帮助:

    您可以将sals错误报告处理程序设置为写入磁盘,请参见 http://www.erlang.org/doc/man/sasl_app.html :

    sasl_error_logger = Value <optional>
    

    Value 是其中之一:

    {file,FileName}
    

    安装 sasl_report_file_h 在错误记录器中。这使得所有的报告都进入文件 FileName 文件名 是一个字符串。

    我还隐约记得有一种方法可以安装自定义处理程序回调,但不幸的是,我现在似乎找不到它。