如何使Flask登录到stdout?

时间:2019-07-05 15:22:15

标签: python python-3.x logging flask

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

  
127.0.0.1 - - [05/Jul/2019 18:18:16] "POST /test/ HTTP/1.1" 200 -

问题在于此日志记录已记录到stderr,我希望它以默认格式执行所有相同的记录,而记录到sys.stdout

我尝试过这样的事情:

import logging
import sys

app = flask.Flask(__name__)
handler = logging.StreamHandler(sys.stdout)
app.logger.addHandler(handler)

根据flask documentation,我尝试了:

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__)

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

1 个答案:

答案 0 :(得分:0)

根据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',
        'formatter': 'default'
    }},
    'root': {
        'level': 'INFO',
        'handlers': ['wsgi']
    }
})


app = flask.Flask(__name__)
相关问题