我正在使用超级用户作为Docker容器的入口点,如https://docs.docker.com/articles/using_supervisord/中所述,
我希望所有日志都写入stdout,以便可以利用docker日志或systemd日志等内置工具,尤其是在CoreOS上运行容器时.
对于stderr,子进程有redirect_stderr = true选项,
是否有可能以某种方式将子进程stdout重定向回supervisor,而不处理实际的日志文件?
最佳答案
您可以使用以下配置选项将程序的标准输出重定向到主管的标准输出:
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
说明:
>当进程打开/ dev / fd / 1(与/ proc / self / fd / 1相同)时,系统实际上会克隆该进程的文件描述符#1(stdout).因此,将其用作stdout_logfile会使超级用户将程序的stdout重定向到其自己的stdout.
> stdout_logfile_maxbytes = 0禁用日志文件轮换,这显然对stdout没有意义.不指定此选项将导致错误,因为默认值为50MB,并且超级用户不够智能,无法检测到指定的日志文件不是常规文件.
欲获得更多信息:
http://veithen.github.io/2015/01/08/supervisord-redirecting-stdout.html