Как изменить формат вывода на экран журнала / отладки Flask? - PullRequest
2 голосов
/ 26 марта 2019

Мне нужно изменить вывод по умолчанию для отладки Flask / Werkzeug.

Я пробовал это:

app = Flask(__name__)
app.config["TESTING"] = True
...
log = logging.getLogger("werkzeug")
log.disabled = True

И это работает.Вывод полностью подавлен, больше нет таких строк, как:

111.222.81.83 - - [26/Mar/2019 13:31:04] "POST /catchdata HTTP/1.1" 200 -
112.122.81.83 - - [26/Mar/2019 13:31:07] "POST /catchdata HTTP/1.1" 200 -

Что хорошо!

Затем я включил эту строку кода:

@app.route("/catchdata", methods=["POST"])
def catchdata():
    app.logger.info("In Catch")
    ...

и этовот что у меня есть:

--------------------------------------------------------------------------------
INFO in __init__ [/srv/www/wsgi/Flask/service_py3/app/srv/__init__.py:438]:
In Catch
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
INFO in __init__ [/srv/www/wsgi/Flask/service_py3/app/srv/__init__.py:438]:
In Catch
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
INFO in __init__ [/srv/www/wsgi/Flask/service_py3/app/srv/__init__.py:438]:
In Catch
--------------------------------------------------------------------------------

Как изменить форматирование по умолчанию, чтобы получить только:

In Catch
In Catch
In Catch

Мне не нужно регистрироваться в файл.Только экран.Спасибо!

1 Ответ

0 голосов
/ 26 марта 2019

Flask использует стандартные объекты ведения журнала Python с конфигурацией по умолчанию, состоящей из StreamHandler с простым средством форматирования.

Если требуется настраиваемая настройка ведения журнала, документация для ведения журнала Flask ссылается на пример с использованием Python logging.config.dictConfig и рекомендует выполнить пользовательскую настройку как можно скорее в программе:

Когда вы хотите настроить ведение журнала для вашего проекта,Вы должны сделать это как можно скорее, когда программа запускается.Если доступ к app.logger осуществляется до того, как будет настроено ведение журнала, он добавит обработчик по умолчанию. Если возможно, настройте ведение журнала перед созданием объекта приложения .

Если вы просто хотите изменить формат вывода обработчика по умолчанию, вы можете просто установить новый модуль форматирования, инициализированный с помощьюжелаемый формат для него:

import logging
from flask import Flask, logging as flog

app = Flask(__name__)

@app.route("/")
def random_name():
    app.logger.info("default flask logging format")
    flog.default_handler.setFormatter(logging.Formatter("%(message)s"))
    app.logger.info("message-only custom format")
    return "random value"

, который дает следующий вывод

[2019-03-26 14:42:06,511] INFO in main: default flask logging format
message-only custom format

Документация Python 3

Редактировать
Оказывается, что настройки ведения журнала Flask были значительно изменены с помощью этого коммита , который, похоже, закончился в версии 1.0, представив default_handler.
В старых версиях вы можете упастьВернемся к следующему решению:

app.logger.handlers[0].setFormatter(logging.Formatter("%(message)s"))

Я хотел бы отметить, что этот подход использует недокументированный атрибут handlers для нативных Logger объектов.Хотя это не определено как то, что следует рассматривать как частное, я все же был бы настороже использовать его в рабочем коде.
Это решение также полагается на то, что StreamHandler будет первым, добавленным в регистратор.

В любом случае предпочтительным методом должна быть чистая выделенная настройка ведения журнала, как указано в документах Flask, которые я связал.

...