Erlang如何在分离的erl上通过JCL查看应用程序输出?

时间:2013-06-25 05:18:31

标签: erlang otp

我首先在分离模式下启动node_a,然后启动node_b控制台并使用JCL(Ctrl + G)连接到node_a,然后使用application:start / 1启动应用程序。然后我无法在应用程序中看到每个io:format输出。怎么解决这个问题?

2 个答案:

答案 0 :(得分:0)

而不是使用io:format使用lager之类的日志记录解决方案并执行tail -f console.log以查看更新到STDOUT输出。如果我没记错的话,默认情况下STDOUT会在分离的节点上发送到/dev/null(如果你不使用像lager这样的日志记录解决方案)。

如果您想使用远程shell,并查看直接输出,则可以使用io:fwrite(user,"the result is ~w\n",[X])

答案 1 :(得分:0)

您可以使用erlang函数group_leader(Group_leader,Pid)。这是一个小例子:

在一个控制台中我运行该功能:

ploop(I) ->
  io:format("mess num ~p, group_leader is ~p~n",[I,group_leader()]),
  receive
    stop -> io:format("bye bye~n"); 
    {group,P,F} ->
      group_leader(P,self()),
      F ! group_changed,
      ploop(0)
  after 5000 ->
    ploop(I+1)
  end.
连接到远程shell后第二个控制台中的

,我发送消息:

PD ! {group,group_leader(),self()}.

其中PD是流程ploop的pid,就是这样。但是,必须对要捕获io:format的所有进程执行此操作。您可以使用processes()的结果执行此操作,但我没有验证它。