lfh 发表于 2019-10-11 17:54:06

关于 连接远程 节点的打印输出问题

io:format(IoDevice, Format, Data)决定了输出到何处。
正常的 io:format(Format, Data)默认输出是 erlang:group_leader(),就是该进程的 小组领导。
所以接收 远程节点的 io:format 输出, 只要把 本地连接节点的 erlang:group_leader() 告知远程节点,让远程节点发过来即可。
这其中存在一个问题,自带的 io:format(IoDevice, Format, Data) 是阻塞的,对远程节点来说是个比较大的负担。
远程发送打印时可以对 io:format 进行更改, 改成 只发送不管结果, 负担就大幅度减小。
下面直接贴上改进代码:
io_format(Pid, Format, Args) ->
        case net_kernel:dflag_unicode_io(Pid) of
                true -> Req = {put_chars,unicode,io_lib,format,};
                false -> Req = {put_chars,io_lib,format,}
        end,
        Pid ! {io_request, self(), null, Req},
        ok.


dreamxyp 发表于 2019-12-18 15:42:04

把要写的日志发到别的 进程去 不应响业务进程

io:format(IoDevice, Format, Data)   阻塞也没关系的
页: [1]
查看完整版本: 关于 连接远程 节点的打印输出问题