I am working on a decentralized Erlang application. I am currently working on a single PC and creating multiple nodes by initializing erl with the -sname flag.
When I spawn a process using spawn/4 on its home node, I can see output generated by calls io:format/2 within that process in its home erl instance.
When I spawn a process remotely by using spawn/4 in combination with register_name, output of io:format/2 is sometimes redirected back to the erl instance where the remote spawn/4 call was made, and sometimes remains completely invisible.
Similarly, when I use rpc:call/4, output of io:format/2 calls is redirected back to the erl instance where the `rpc:call/4′ call is made.
How do you get a process to emit debugging output back to its parent erl instance?
You can supply 1st argument to io:format/3 on the second node, using result of erlang:group_leader() from the first node.
Starting first node, registering local shell process group leader globally:
Starting second node, connecting, using globally registered process as io device
You will see test output in the first node.
This is the same way that Christian suggested, just a bit more explicit. So you can have error_logger for production logging and io:format/3 just for quick debugging.