supervisor系列:5、日志

supervisor系列:5、日志



supervisord执行的主要任务之一是日志记录。 supervisord会记录一个活动日志,详细描述它在运行时所做的事情。它还将子进程stdout和stderr输出记录到其他文件(如果配置为这样做的话)。

1. 活动日志

活动日志是supervisord记录有关自身健康状况、子流程状态更改、事件产生的任何消息以及调试和信息消息的地方。活动日志的路径是通过配置文件的[supervisord]部分中的logfile参数配置的,默认为$CWD/supervisord.log。如果此选项的值是特殊字符串syslog,则活动日志将路由到syslog服务,而不是写入文件。活动日志流量示例如下所示。为了更好地适应屏幕,有些线条被打断了。

1.1 活动日志输出示例

2007-09-08 14:43:22,886 DEBG 127.0.0.1:Medusa (V1.11) started at Sat Sep  8 14:43:22 2007
        Hostname: kingfish
        Port:9001
2007-09-08 14:43:22,961 INFO RPC interface 'supervisor' initialized
2007-09-08 14:43:22,961 CRIT Running without any HTTP authentication checking
2007-09-08 14:43:22,962 INFO supervisord started with pid 27347
2007-09-08 14:43:23,965 INFO spawned: 'listener_00' with pid 27349
2007-09-08 14:43:23,970 INFO spawned: 'eventgen' with pid 27350
2007-09-08 14:43:23,990 INFO spawned: 'grower' with pid 27351
2007-09-08 14:43:24,059 DEBG 'listener_00' stderr output:
 /Users/chrism/projects/supervisor/supervisor2/dev-sandbox/bin/python:
 can't open file '/Users/chrism/projects/supervisor/supervisor2/src/supervisor/scripts/osx_eventgen_listener.py':
 [Errno 2] No such file or directory
2007-09-08 14:43:24,060 DEBG fd 7 closed, stopped monitoring <PEventListenerDispatcher at 19910168 for
 <Subprocess at 18892960 with name listener_00 in state STARTING> (stdout)>
2007-09-08 14:43:24,060 INFO exited: listener_00 (exit status 2; not expected)
2007-09-08 14:43:24,061 DEBG received SIGCHLD indicating a child quit

活动日志“level”是在配置文件中通过[supervisord]ini文件部分中的loglevel参数配置的。设置loglevel后,指定优先级的消息以及优先级更高的消息将被记录到活动日志中。例如,如果loglevelerror,则将记录errorcritical优先级的消息。但是,如果loglevelwarn,则将记录warnerrorcritical消息。

1.2 活动日志等级

下表更详细地描述了日志级别,按最高优先级到最低优先级排序。“配置文件值”是在配置文件的[supervisord]部分提供给loglevel参数的字符串,“输出代码”是显示在活动日志输出行的代码。

配置文件值输出编码描述
criticalCRIT指示需要用户立即注意的条件、管理员状态更改或管理员本身的错误的消息。
errorERRO指示潜在可忽略的错误条件的消息(例如,无法清除日志目录)。
warnWARN指示异常情况(不是错误)的消息。
infoINFO正常的信息输出。如果没有显式配置日志级别,则这是默认的日志级别。
debugDEBG对于试图调试流程配置和通信行为(流程输出、侦听器状态更改、事件通知)的用户有用的消息。
traceTRAC对试图调试管理插件的开发人员有用的消息,以及关于HTTP和RPC请求和响应的信息。
blatherBLAT对试图调试supervisor本身的开发人员有用的消息。

1.3 活动日志轮换

根据配置文件[supervisord]部分中的logfile_maxbyteslogfile_backups参数的组合,supervisord会对活动日志进行轮换。当活动日志达到logfile_maxbytes字节时,当前日志文件将被移动到备份文件中,并创建一个新的活动日志文件。出现这种情况时,如果现有备份文件的数量大于或等于logfile_backups,则删除最旧的备份文件,并对备份文件进行相应的重命名。如果正在写入的文件名为supervisord.log,当它超过logfile_maxbytes时,它将被关闭并改名为supervisord.log.1,如果文件supervisord.log.1, supervisord.log.2等已经存在,则重命名为supervisord.log.2, supervisord.log.3等。如果logfile_maxbytes为0,则永远不会转换日志文件(因此永远不会进行备份)。如果logfile_backups为0,则不保留任何备份。

2. 子进程日志

默认情况下,会捕获supervisor生成的子进程的标准输出,以便重新显示给supervisorctl和其他客户端用户。如果配置文件中的[program:x][fcgi-program:x],或[eventlistener:x]部分没有执行与日志文件相关的特定配置,则为true:

  • supervisord将捕获子进程的stdout和stderr输出到临时文件中。每个流都被捕获到一个单独的文件中。这就是所谓的AUTO日志模式。
  • AUTO日志文件是自动命名的,并放置在配置文件的[supervisord]部分的childlogdir目录下。
  • 每个AUTO日志文件的大小由程序部分的{streamname}_logfile_maxbytes值限定(其中{streamname}是" stdout “或” stderr ")。当它达到这个数字时,它会根据{streamname}_logfile_backups轮换(就像活动日志一样)。

影响子进程登录[program:x][fcgi-program:x]节的配置关键词如下:

redirect_stderr, stdout_logfile, stdout_logfile_maxbytes, stdout_logfile_backups, stdout_capture_maxbytes, stdout_syslog, stderr_logfile, stderr_logfile_maxbytes, stderr_logfile_backups, stderr_capture_maxbytes, 和 stderr_syslog.

[eventlistener:x]段可能不指定redirect_stderrstdout_capture_maxbytesstderr_capture_maxbytes,但否则它们接受相同的值。

[supervisord]配置文件部分影响子进程日志记录的配置关键词是:childlogdirnocleanup

2.1 捕获模式

捕获模式是Supervisor的一个高级功能。您不需要理解捕获模式,除非您希望根据从子进程输出解析的数据采取操作。

如果配置文件中的[program:x]节定义了一个非零的stdout_capture_maxbytesstderr_capture_maxbytes参数,由program部分表示的每个进程可以在其stdout或stderr流(分别)上发出特殊的令牌,这将有效地导致supervisor发出PROCESS_COMMUNICATION事件(有关事件的描述,请参阅Events)。

进程通信协议依赖于两个标签,一个命令supervisor进入捕获模式,另一个命令退出。当进程流进入捕获模式时,发送到流的数据将被发送到内存中的一个单独的缓冲区,即捕获缓冲区,该缓冲区允许包含最大的capture_maxbytes字节。在捕获模式中,当缓冲区的长度超过capture_maxbytes字节时,缓冲区中最早的数据将被丢弃,以便为新数据腾出空间。当一个进程流退出捕获模式时,一个PROCESS_COMMUNICATION事件子类型会被supervisor触发,它可能会被事件监听器拦截。

在进程流中开始“捕获模式”的标记是<!--XSUPERVISOR:BEGIN-->。退出捕获模式的标记是<!--XSUPERVISOR:END-->。这些标记之间的数据可以是任意的,并构成PROCESS_COMMUNICATION事件的有效负载。例如,如果一个程序的stdout_capture_maxbytes设置为“1MB”,它在其stdout流上发出以下内容:

<!--XSUPERVISOR:BEGIN-->Hello!<!--XSUPERVISOR:END-->

在这种情况下,supervisord将发出一个PROCESS_COMMUNICATIONS_STDOUT事件,其中包含有效负载“Hello!”中的数据。

一个(用Python编写的)会发出进程通信事件的脚本示例位于supervisor包的scripts目录中,名为sample_comment.py

指定为“事件监听器”([eventlistener:x]节)的进程的输出不会以这种方式处理。这些进程的输出不能进入捕获模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值