首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python信息日志转到supervisord的stderr_logfile

Python信息日志转到supervisord的stderr_logfile
EN

Stack Overflow用户
提问于 2020-02-03 19:43:48
回答 1查看 722关注 1票数 2

我有一个python flask应用程序,我已经将其配置为通过Supevisord运行。supervisor.conf文件看起来像这样-

代码语言:javascript
复制
[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的默认日志库记录我的信息消息,如下所示-

代码语言:javascript
复制
logger.info("Some info msg")

这种行为的原因可能是什么?

EN

回答 1

Stack Overflow用户

发布于 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等)转到哪一个。

在这个被接受的答案中有有效的代码,所以我不在这里重复它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60038580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档