请记住,12factor主要应用于您的应用程序或称为您的“微服务”,而不是像Nginx,Apache,Cherokee等服务器,他们可以一如既往地登录,但您的应用程序是唯一的您可能想要扩展并将部署在分布式环境中,因此需要以不同方式处理。
关于日志记录,其主要思想是,以避免应用程序写入到磁盘,只写STDOUT
或STDERR
,正常的日志在“结构化日志记录”的格式,并通过像elastiksearch工具后收集/分析。这简化了检查日志的过程,以便在出现问题时不需要登录到每台服务器并检查发生了什么。
在许多情况下,当应用程序将日志写入磁盘时,如果日志轮换机制未正确配置,服务器磁盘可能会变满并且服务将被中断。
如果您正在寻找一位与12factor配合得很好的主管。
十二个因素的应用程序进程不应该守护或写入PID文件。相反,依靠操作系统的流程管理器(例如Upstart,云平台上的分布式流程管理器或开发中的Foreman等工具)来管理输出流,响应崩溃的流程并处理用户启动的重新启动和关闭。
检查immortal它可以结合STDOUT和STDERR或登录单独之外的情况下也让日志完好无时间戳是一种结构化的日志,后来可以通过弹性搜索中使用,或任何其他工具,例如:
cmd: microservice
env:
DEBUG: 1
ENVIRONMENT: production
log:
file: /var/log/app-1.log
age: 86400 # seconds
num: 7 # int
size: 1 # MegaBytes
timestamp: true # will add timesamp to log
相同的服务,但与STDOUT和STDERR日志分离:
cmd: microservice
env:
DEBUG: 1
ENVIRONMENT: production
log:
file: /var/log/app-1.log
age: 86400 # seconds
num: 7 # int
size: 1 # MegaBytes
stderr:
file: /var/log/app-error.log
age: 86400 # seconds
num: 7 # int
size: 1 # MegaBytes
timestamp: true # will add timesamp to log
更多关于run.yml
可以在这里找到:https://immortal.run/post/run.yml/
你没有回答stdout的问题,因为stderr仍然可以被捕获并重定向到任何需要的地方。此外,如果您说“尽可能使应用程序不可知”,那么它们必须将它们的日志输入stderr,并将其输出提供给stdout,因为这是原始设计。如果你不了解你的环境,那么你只需遵循标准。这是最安全的方式。 –
是的,我想我真的不知道*答案 - 希望Wiggins已经在某处解释过...我可以说Heroku从应用中捕获了STDOUT和STDERR,让您可以独立管理它们;因为** ** STDOUT'和'STDERR'都会丢失/无法访问(即在无法访问服务器的完全“云”环境中)。 – willoller
昨天我已经通过电子邮件向Adam Wiggins发送了一封请求,并通过此页面的链接向其解释。 –