我有一个python flask应用程序,我已经将其配置为通过Supevisord运行。supervisor.conf
文件看起来像这样-
[inet_http_server]
port=127.0.0.1:9001
[supervisord]
logfile=/path/to/log/supervisord.log
logfile_maxbytes=0 ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=0 ; # of main logfile backups; 0 means none, default 10
loglevel=debug ; log level; default info; others: debug,warn,trace
pidfile=/path/to/supervisord.pid
nodaemon=false ; start in foreground if true; default false
directory=/path/to/project
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
; The supervisorctl section configures how supervisorctl will connect to
; supervisord. configure it match the settings in either the unix_http_server
; or inet_http_server section.
[supervisorctl]
serverurl=http://127.0.0.1:9001
history_file=/path/to/.sc_history ; use readline history if available
[program:my_server]
command=<command to run the program>
directory=/path/to/project
stdout_logfile=/path/to/log/%(program_name)s_stdout.log ; stdout log path, NONE for none; default AUTO
stdout_logfile_maxbytes=0 ;
stderr_logfile=/path/to/log/%(program_name)s_stderr.log ; stderr log path, NONE for none; default AUTO
stderr_logfile_backups=0 ; # of stderr logfile backups (0 means none, default 10)
问题是,当我通过supervisord运行应用程序时,它将所有输出记录到%(program_name)s_stderr.log
日志文件中,而不是%(program_name)s_stdout.log
文件中。
我使用python的默认日志库记录我的信息消息,如下所示-
logger.info("Some info msg")
这种行为的原因可能是什么?
发布于 2021-06-26 07:31:53
虽然这个问题是用flask和supervisord标记的,但核心问题实际上是python的“日志”系统是如何工作的。默认情况下,logger.info()消息被发送到stderr,而不是stdout,所以flask和supervisor会按照命令执行(实际上flask几乎不会进入)。
python/logger部分有一个很好的答案:Logging, StreamHandler and standard streams
简而言之,您必须为stderr和stdout创建单独的StreamHandler,并告诉它们什么消息(INFO、DEBUG、ERROR等)转到哪一个。
在这个被接受的答案中有有效的代码,所以我不在这里重复它。
https://stackoverflow.com/questions/60038580
复制相似问题