Как сделать журнал Flask на стандартный вывод? - PullRequest
0 голосов
/ 05 июля 2019

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)

И на основании документации на колбу Я попробовал:

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 голосов
/ 12 июля 2019

На основании комментария Романа Перехреста это сделало работу:

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__)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...