Регистратор в util
не генерирует выходные данные, поскольку в журнале Python по умолчанию заданы журналы предупреждений и выше, а информация ниже, чем предупреждение.Сконфигурируйте ведение журнала Python с нужным уровнем и обработчиками.
Если ведение журнала не настроено, Flask добавляет обработчик для своего собственного регистратора и устанавливает уровень для отладки в режиме отладки, поэтому сообщение app.logger
появляется. Документы Flask показывают, как настроить ведение журнала, как это происходит, и другие примеры.
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://flask.logging.wsgi_errors_stream',
'formatter': 'default'
}},
'root': {
'level': 'INFO',
'handlers': ['wsgi']
}
})
app = Flask(__name__)
from project import util
util.test()
Если вы импортируете util
до вызова dictConfig
, вы заметите, чторегистрация все еще не работает.Это связано с тем, что Python отключит существующие регистраторы при настройке.Вы можете предотвратить это, добавив 'disable_existing_loggers': False
в конфигурацию, но это связано с тем, что вы можете увидеть дублирующиеся журналы, если регистратор уже настроен.В качестве альтернативы, не получайте logger
на уровне модуля, поместите его внутри функции, когда это необходимо.
Если вы специально хотите использовать регистратор приложения в другом месте, вам необходимо импортировать приложение.Поскольку это подвержено ошибкам циклического импорта или даже невозможно при использовании фабрики приложений, вместо этого используйте current_app
для доступа к приложению во время запросов.
from flask import current_app
def test():
current_app.logger.info('info message from util')