为什么stdout for Factor12中的日志?

Max*_*kov 6 logging 12factor

我最近发现了https://12factor.net/-除日志记录要求外,一组生产环境要求看起来非常合理。

https://12factor.net/logs表示日志应转到STDOUT。WAT?为什么?

最近7年以来,我主要从事管理工作,一定错过了一些东西。但是我确实清楚地记得那STDERR是为达到这个确切目的而设计的-单独作为诊断信息流。它已经使用了数十年。

为什么要打破常规?

我确实记得默认情况下所有HTTP服务器都配置为将STDOUT发送到浏览器(客户端),并将STDERR发送到日志文件。到处都是。对于大多数环境而言,这是显而易见的默认设置。我的第一个想法是他们认为12因子标准的作者犯了一个错误。

我想念什么?为什么要将日志发送到STDOUT?

请不要告诉我,现代的Web应用程序没有“正常输出”。首先,他们这样做了,其次,这并不符合打破数十年来一直有效且仍然完全符合目的的惯例的理由。

非常感谢您的想法。谢谢。

wil*_*ler 0

这是因为 12 要素应用程序预计将在某些流程管理器(例如类似的东西)的控制下作为单独的进程supervisord运行,以管理将应用程序输出路由到它们实际所属的位置。

他们的想法是让应用程序尽可能不可知——以系统相关的方式处理所有应用程序的所有输出,同时对应用程序隐藏所有这些输出。

因此,我预计“12 因素”响应是您的应用程序应该推送到STDOUT,并且supervisord应该捕获该输出(以及来自STDOUT同一主机上运行的所有其他应用程序的所有其他输出)并重定向到STDERRsyslog或任何您想要的内容。需要,基于每个主机。

更新

我认为 12 因素推荐守护进程,但由于原因(pid 等),它们实际上没有。进一步的证据表明 12 因素的流程管理部分至关重要。