【问题标题】:How to make Flask log to stdout instead of stderr?如何使 Flask 记录到标准输出而不是标准错误?
【发布时间】:2019-07-05 15:22:15
【问题描述】:

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

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

【问题讨论】:

  • 'stream': 'ext://sys.stdout' ?
  • @RomanPerekhrest 谢谢,效果很好!随时将其作为实际答案发布,以便我接受:)

标签: python python-3.x logging flask


【解决方案1】:

根据@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__)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多