Python: как подавить логирование операторов из сторонних библиотек?
Мои настройки регистрации выглядят как
import requests
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger('BBProposalGenerator')
Когда я запускаю это, я получаю журналы как
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): localhost
INFO:BBProposalGenerator:created proposal: 763099d5-3c8a-47bc-8be8-b71a593c36ac
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): localhost
INFO:BBProposalGenerator:added offer with cubeValueId: f23f801f-7066-49a2-9f1b-1f8c64576a03
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): localhost
INFO:BBProposalGenerator:evaluated proposal: 763099d5-3c8a-47bc-8be8-b71a593c36ac
Как я могу подавить сообщения журнала от requests
пакет? так что я вижу только логи из моего кода
INFO:BBProposalGenerator:created proposal: 763099d5-3c8a-47bc-8be8-b71a593c36ac
INFO:BBProposalGenerator:added offer with cubeValueId: f23f801f-7066-49a2-9f1b-1f8c64576a03
INFO:BBProposalGenerator:evaluated proposal: 763099d5-3c8a-47bc-8be8-b71a593c36ac
Спасибо
2 ответа
Вы назвали basicConfig()
с уровнем logging.INFO
, который устанавливает эффективный уровень INFO
для корневого регистратора и всех дочерних регистраторов, которые не имеют явно установленных уровней. Это включает в себя requests
регистраторы, и объясняет, почему вы получаете эти результаты.
Вместо этого вы можете сделать
logging.basicConfig()
который оставит уровень в его значении по умолчанию WARNING
, но добавьте обработчик, который выводит сообщения журнала на консоль. Затем установите уровень на вашем логгере INFO
:
logger = logging.getLogger('BBProposalGenerator')
logger.setLevel(logging.INFO)
Сейчас, INFO
события более высокой степени тяжести записываются в журнал BBProposalGenerator
или любой из его потомков будет напечатан, кроме корневого логгера (и других его потомков, таких как requests.XXX
) останется на WARNING
уровень и только шоу WARNING
или более высокие сообщения.
Конечно, вы можете указать более высокий уровень в basicConfig()
позвонить - если вы указали ERROR
Например, вы увидите только ERROR
или выше от всех других регистраторов, но INFO
или выше от BBProposalGenerator
и его потомки.
То, что вы хотите сделать, это применить фильтр ко всем регистраторам, чтобы вы могли контролировать то, что испускается. Единственный способ применить фильтр ко всем регистраторам - это инициализировать класс Logger Logging чем-то, полученным из logging.Logger, и применить фильтр там. Как так:
class MyFilter(logging.Filter):
def filter(self, record):
if record.name != 'BBProposalGenerator':
return False
return True
class MyLogger(logging.Logger):
def __init__(self, name):
logging.Logger.__init__(self, name)
self.addFilter(MyFilter())
И тогда все, что вам нужно сделать, это до того, как будут созданы экземпляры любых регистраторов, установить класс регистратора по умолчанию в качестве вашего производного класса, вот так:
logging.setLoggerClass(MyLogger)
logging.basicConfig(level=logging.INFO)
Надеюсь это поможет!