Простая фильтрация журнала с Flask - PullRequest
0 голосов
/ 01 апреля 2020

Я новичок в Flask, и у меня возникают проблемы с фильтрацией некоторых журналов. Мой пример использования прост: я не хочу регистрировать запросы проверки работоспособности, которые попадают на маршрут /health.

Вот что у меня есть:

from flask import Flask
from flask.logging import logging

class NoHealth(logging.Filter):
    def filter(self, record):
        return 'GET /health' not in record.getMessage()

no_health = NoHealth()
app = Flask(__name__)
app.logger.addFilter(no_health)
app.logger.setLevel('INFO')

@app.route('/health')
def health_check():
    return "OK"

Журналы, которые я хочу падение выглядит так:

127.0.0.1 - - [31/Mar/2020 17:51:03] "GET /health HTTP/1.1" 200 -

Однако они все еще проходят. Чего мне не хватает?

1 Ответ

1 голос
/ 02 апреля 2020

Журналы доступа записываются werzeug (в данном случае веб-сервер, на котором запущено приложение flask). Таким образом, лучшим вариантом будет увеличение уровня ведения журнала до warning:

logging.getLogger("werkzeug").setLevel('WARNING')

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

logging.getLogger("werkzeug").addFilter(NoHealth())
...