如果我使用iex
启动我的应用程序,我会在控制台上看到我的应用程序的日志语句。
如果我启动我的应用程序分离,然后remsh
进入它,我怎么能看到相同的输出。
答案 0 :(得分:1)
默认情况下,从远程shell执行的任何操作都会将其组头设置为shell的组长,因此I / O将按预期工作。
对于从主节点启动的进程,它们的组长已经设置好,因此它们的I / O不会被重定向到远程shell。您可以使用Process.group_leader/2
设置流程的组长,例如:Process.group_leader(pid, Process.group_leader())
,它会将pid
的组长设置为当前流程的组长。您可以将Logger的:console
后端配置为使用Logger.configure_backend(:console, [device: Process.group_leader()])
重定向到您的shell。之后,应将所有控制台Logger输出定向到远程shell。
要非常小心这样做。如果你在一个会产生大量输出的应用程序上执行此操作,那么你可能会面临群组负责人超载的风险,这可能会导致崩溃,从而导致任何问题尝试写入它 - 当您在远程节点上分配组长时,这样做的可能性会增加。我建议只在实验时或者在开发过程中这样做。在生产中,您可能应该将日志写入文件,并且通过ssh被动地拖尾这些日志比将记录器的组长更改为远程shell更安全 - 特别是如果您在不更改组长的情况下杀死shell背部;这将导致尝试写入组长的任何进程崩溃。在更改过程之前,您还需要小心保存过程的组长,以便确保将其更改回正确的过程。
答案 1 :(得分:0)
我在这里寻找的是来自@bitwalker酿酒厂软件包中用于发布管理的attach
发布任务。