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

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

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

最佳答案

基于 @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__)

关于python - 如何让 Flask 记录到 stdout 而不是 stderr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56905756/

相关文章:

python - 带有二维数组的 numpy.partition()

python - 将参数传递给线程python

python - 我如何在 Anaconda Windows 10 中安装 wget?

python - 为什么这两个函数在dis.dis下反汇编后字节码是一样的?

python - 在各种操作系统中保存日志时的最佳做法是什么?

java - 如何在 beans 实例化之前记录 spring boot 应用程序的所有 Activity 属性?

"library"文件中的 python eval

python - 检测用户正在查看哪个立方体?

Python 2.7 和 pip install 与 _markerlib 相关的问题以及安装其他包失败

java - Tomcat 日志 : What's the difference between %D and %F?