Flask - при входе в Blueprint имя модуля не отображается - PullRequest
0 голосов
/ 09 апреля 2020

Я создал план входа в систему с before_app_request и after_app_request. Я использую собственный Logger, который используется во всем моем приложении.

Проблема в том, что каждая запись в журнале, сделанная before_app_request или after_app_request, показывает только имя модуля "flask_api_blueprint".

flask_api_blueprint. py:

from flask import Blueprint
from myLogger import myLoggerFile


api_blueprint = Blueprint('api_blueprint', __name__)


@api_blueprint.before_app_request
def log_incoming_request():
    myLoggerFile.getLogger().info("INCOMING REQUEST")

flask_api_example.py:

from flask import Flask

from flask_api_blueprint import api_blueprint
from myLogger import myLoggerFile


app = Flask(__name__)
app.register_blueprint(api_blueprint)

logger = myLoggerFile.getLogger()


@app.route('/')
def index():
    logger.info("Index called!")
    file_A.do_something()  # also uses myLoggerFile.getLogger() 
    return "Hello World"

Запись в журнале выглядит следующим образом:

[2020-04-09 13:29:56,011] 127.0.0.1 requested http://127.0.0.1:5000/ - INFO in flask_api_blueprint: INCOMING REQUEST

Я хочу, чтобы эта запись говорила "flask_api_example" вместо из "flask_api_blueprint". Как я могу изменить это, чтобы использовать свой собственный регистратор при регистрации правильного имени модуля, который использует план?

1 Ответ

0 голосов
/ 09 апреля 2020

Итак, единственное решение, которое я нашел, это переназначить имя модуля, определив форматер моего Logger следующим образом:

from flask import current_app

class RequestFormatter(logging.Formatter):
    def format(self, record):
        if flask.has_request_context():
            record.module = current_app.name
        return super().format(record)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...