如何让 Flask 记录到 stdout 而不是 stderr?

ruo*_*ola 4 python logging flask

Flask 会自动进行各种日志记录,例如当收到 POST 请求时 Flask 会自动记录它:

127.0.0.1 - - [05/Jul/2019 18:18:16] "POST /test/ HTTP/1.1" 200 -
Run Code Online (Sandbox Code Playgroud)

问题是此日志记录是完成到 的stderr,我希望它使用默认格式进行所有相同的日志记录,但sys.stdout改为记录到 。

我尝试过这样的事情:

import logging
import sys

app = flask.Flask(__name__)
handler = logging.StreamHandler(sys.stdout)
app.logger.addHandler(handler)
Run Code Online (Sandbox Code Playgroud)

根据Flask 的文档我尝试过:

import sys
from logging.config import dictConfig

dictConfig({
    'version': 1,
    'formatters': {'default': {
        'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
    }},
    'handlers': {'wsgi': {
        'class': 'logging.StreamHandler',
        'stream': 'sys.stdout',
        'formatter': 'default'
    }},
    'root': {
        'level': 'INFO',
        'handlers': ['wsgi']
    }
})

app = flask.Flask(__name__)
Run Code Online (Sandbox Code Playgroud)

但第一个没有达到预期的效果,第二个就崩溃了。

ruo*_*ola 7

根据@RomanPerekhrest的评论,这完成了工作:

import sys
from logging.config import dictConfig

dictConfig({
    'version': 1,
    'formatters': {'default': {
        'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
    }},
    'handlers': {'wsgi': {
        'class': 'logging.StreamHandler',
        'stream': 'ext://sys.stdout',  # <-- Solution
        'formatter': 'default'
    }},
    'root': {
        'level': 'INFO',
        'handlers': ['wsgi']
    }
})


app = flask.Flask(__name__)
Run Code Online (Sandbox Code Playgroud)