我首先在分离模式下启动node_a,然后启动node_b控制台并使用JCL(Ctrl + G)连接到node_a,然后使用application:start / 1启动应用程序。然后我无法在应用程序中看到每个io:format输出。怎么解决这个问题?
答案 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()的结果执行此操作,但我没有验证它。