Por padrão, a biblioteca python Requests grava mensagens de log no console, ao longo das linhas de:
Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606
Normalmente, não estou interessado nessas mensagens e gostaria de desativá-las. Qual seria a melhor maneira de silenciar essas mensagens ou diminuir a verbosidade das solicitações?
python
logging
python-requests
verbosity
aknuds1
fonte
fonte
Respostas:
Eu descobri como configurar o nível de log de solicitações , isso é feito através do módulo de log padrão . Decidi configurá-lo para não registrar mensagens, a menos que sejam pelo menos avisos:
Se você deseja aplicar essa configuração à biblioteca urllib3 (normalmente usada por solicitações), adicione o seguinte:
fonte
pysimplesoap
, e esta resposta me ajudar a salvar meu diagetLogger("urllib3")
deve suprimir as mensagens.Caso você tenha vindo aqui procurando uma maneira de modificar o log de qualquer módulo (possivelmente profundamente aninhado), use
logging.Logger.manager.loggerDict
para obter um dicionário de todos os objetos do logger. Os nomes retornados podem ser usados como argumento paralogging.getLogger
:Por user136036 em um comentário, saiba que este método mostra apenas os criadores de logs que existem no momento em que você executa o snippet acima. Se, por exemplo, um módulo criar um novo criador de logs ao instanciar uma classe, você deverá colocar esse trecho depois de criar a classe para imprimir seu nome.
fonte
urllib3
as mensagens de log ao usarboto3
. O registrador nesse caso ébotocore.vendored.requests.packages.urllib3
, então eu usei isso:logging.getLogger("botocore.vendored.requests.packages.urllib3").setLevel(logging.WARNING)
e finalmente me livrei das mensagens.APScheduler
acontece quando você chamaBackgroundScheduler.BackgroundScheduler()
.Dessa forma, todas as mensagens de level = INFO de urllib3 não estarão presentes no arquivo de log.
Assim, você pode continuar usando o level = INFO para suas mensagens de log ... apenas modifique-o para a biblioteca que está usando.
fonte
setLevel(logging.WARNING)
também para registrar possíveis mensagens de aviso e erro.Deixe-me copiar / colar a seção de documentação que escrevi há uma ou duas semanas, depois de ter um problema semelhante ao seu:
fonte
Para quem
logging.config.dictConfig
estiver usando, você pode alterar o nível de log da biblioteca de solicitações no dicionário da seguinte maneira:fonte
dictConfig
sob o capô.Definir o nome do criador de logs como
requests
ourequests.urllib3
não funcionou para mim. Eu tive que especificar o nome exato do criador de logs para alterar o nível de criação de log.Primeiro Veja quais registradores você definiu, para ver quais deseja remover
E você verá algo assim:
{...'urllib3.poolmanager': <logging.Logger object at 0x1070a6e10>, 'django.request': <logging.Logger object at 0x106d61290>, 'django.template': <logging.Logger object at 0x10630dcd0>, 'django.server': <logging.Logger object at 0x106dd6a50>, 'urllib3.connection': <logging.Logger object at 0x10710a350>,'urllib3.connectionpool': <logging.Logger object at 0x106e09690> ...}
Em seguida, configure o nível para o logger exato:
fonte
Se você tiver um arquivo de configuração, poderá configurá-lo.
Adicione urllib3 na seção de loggers:
Adicione a seção logger_urllib3:
fonte
Esta resposta está aqui: Python: como suprimir instruções de log de bibliotecas de terceiros?
Você pode deixar o nível de log padrão para basicConfig e definir o nível de DEBUG ao obter o logger para o seu módulo.
fonte
fonte
As orientações da Kbrose sobre encontrar qual registrador estava gerando mensagens de log eram imensamente úteis. Para o meu projeto Django, tive que classificar entre 120 registradores diferentes até descobrir que era a
elasticsearch
biblioteca Python que estava causando problemas para mim. De acordo com as orientações da maioria das perguntas, desativei adicionando isso aos meus criadores de logs:Postando aqui caso alguém veja as mensagens de log inúteis sempre que executar uma consulta do Elasticsearch.
fonte
simples: basta adicionar
requests.packages.urllib3.disable_warnings()
depoisimport requests
fonte
INFO
.Não tenho certeza se as abordagens anteriores pararam de funcionar, mas, de qualquer forma, aqui está outra maneira de remover os avisos:
Basicamente, adicionando uma variável de ambiente no contexto da execução do script.
Na documentação: https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings
fonte