Я бы хотел использовать регистрацию в моем приложении Flask, просто вызывая logging.getLogger('myapi')
в каждом из файлов, в который мне нужно войти.
Должно быть одно место для определения обработчика и формата дляэто «глобальный» регистратор приложений.Это работает, но Flask также постоянно регистрирует свои собственные журналы в формате по умолчанию.Эти журналы существуют только при импорте библиотеки fbprophet
.Я хотел бы запретить Flask регистрировать эти дополнительные неформатированные дубликаты журналов.
(Flask также имеет регистратор werkzeug
, что нормально и может остаться.)
Код :
import sys
import logging
import fbprophet
from flask import Flask, jsonify
from werkzeug.serving import run_simple
# Set up my custom global logger
log = logging.getLogger('myapi')
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(logging.Formatter('*** %(asctime)s %(levelname)s %(message)s'))
log.addHandler(handler)
log.setLevel(logging.DEBUG)
def create_app(config={}):
''' Application factory to create and configure the app '''
app = Flask('myapi', instance_relative_config=False)
app.config.from_mapping(config)
log.info('TEST INFO')
log.debug('TEST DEBUG')
@app.route('/health')
def health():
log.info('Health OK')
return 'OK'
return app
if __name__ == '__main__':
dev_config = {'SECRET_KEY': 'dev', 'DEBUG': False}
app = create_app(dev_config)
run_simple('localhost', 5000, app)
Вывод:
Я ожидаю увидеть журналы с префиксом ***
.Те, которые начинаются с LEVEL
, появляются только когда я импортирую пророка в Facebook.
* Serving Flask app "main.py" (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
*** 2019-06-05 14:17:56,702 INFO TEST INFO # good log
INFO:myapi:TEST INFO # bad dupe log
*** 2019-06-05 14:17:56,702 DEBUG TEST DEBUG
DEBUG:myapi:TEST DEBUG
*** 2019-06-05 14:17:56,703 INFO TEST INFO
INFO:myapi:TEST INFO
*** 2019-06-05 14:17:56,703 DEBUG TEST DEBUG
DEBUG:myapi:TEST DEBUG
*** 2019-06-05 14:18:10,405 INFO Health OK
INFO:myapi:Health OK
127.0.0.1 - - [05/Jun/2019 14:18:10] "GET /health HTTP/1.1" 200 - # good werkzeug api log
INFO:werkzeug:127.0.0.1 - - [05/Jun/2019 14:18:10] "GET /health HTTP/1.1" 200 - # bad dupe log
Дополнительные пояснения:
Я тоже пытался настроить регистратор приложения, ноЯ не хочу вызывать current_app.logger
из других модулей.
Я попытался отключить регистратор Flask с помощью logging.getLogger('flask.app').handlers.clear()
, но это также не работает.
При импорте fbprophet
Я получаю следующие ошибки консоли (от пророка):
ERROR:fbprophet:Importing matplotlib failed. Plotting will not work.
ERROR:fbprophet:Importing matplotlib failed. Plotting will not work.
*** 2019-06-05 14:29:06,488 INFO TEST INFO
INFO:myapi:TEST INFO
Я думал, что это может быть причиной проблемы, поэтому я исправил ошибки после этого .Но Flask все еще регистрирует дополнительные журналы.
import plotly
import matplotlib as mpl
mpl.use('TkAgg')
import fbprophet
Сводка:
Поиск отформатированных глобальных журналов во Flask без дубликатов журналов.Мне просто нужны мои глобальные logging.getLogger('myapi')
и werkzeug
журналы API.