Par défaut, la bibliothèque python Requests écrit des messages de journal dans la console, sur le modèle de:
Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606
Je ne suis généralement pas intéressé par ces messages et je voudrais les désactiver. Quelle serait la meilleure façon de faire taire ces messages ou de réduire la verbosité des demandes?
python
logging
python-requests
verbosity
aknuds1
la source
la source
Réponses:
J'ai découvert comment configurer le niveau de journalisation des requêtes , cela se fait via le module de journalisation standard . J'ai décidé de le configurer pour ne pas enregistrer les messages à moins qu'ils ne soient au moins des avertissements:
Si vous souhaitez également appliquer ce paramètre à la bibliothèque urllib3 (généralement utilisée par les requêtes), ajoutez ce qui suit:
la source
pysimplesoap
, et cette réponse m'aide à sauver ma journéegetLogger("urllib3")
pour supprimer les messages.Si vous êtes venu ici à la recherche d'un moyen de modifier la journalisation de n'importe quel module (éventuellement profondément imbriqué), utilisez
logging.Logger.manager.loggerDict
pour obtenir un dictionnaire de tous les objets de journalisation. Les noms retournés peuvent ensuite être utilisés comme argument pourlogging.getLogger
:Par utilisateur136036 dans un commentaire, sachez que cette méthode ne vous montre que les enregistreurs qui existent au moment où vous exécutez l'extrait ci-dessus. Si, par exemple, un module crée un nouvel enregistreur lorsque vous instanciez une classe, vous devez mettre cet extrait après avoir créé la classe afin d'imprimer son nom.
la source
urllib3
les messages du journal lors de l'utilisationboto3
. L'enregistreur dans ce cas estbotocore.vendored.requests.packages.urllib3
, donc j'ai utilisé ceci:logging.getLogger("botocore.vendored.requests.packages.urllib3").setLevel(logging.WARNING)
et je me suis finalement débarrassé des messages.APScheduler
fait lorsque vous appelezBackgroundScheduler.BackgroundScheduler()
.De cette façon, tous les messages de level = INFO de urllib3 ne seront pas présents dans le fichier journal.
Vous pouvez donc continuer à utiliser le level = INFO pour vos messages de journal ... il suffit de le modifier pour la bibliothèque que vous utilisez.
la source
setLevel(logging.WARNING)
pour enregistrer également les éventuels messages d'avertissement et d'erreur.Permettez-moi de copier / coller la section de documentation que j'ai écrite il y a environ une semaine ou deux, après avoir rencontré un problème similaire au vôtre:
la source
Pour toute personne utilisant,
logging.config.dictConfig
vous pouvez modifier le niveau de journal de la bibliothèque de demandes dans le dictionnaire comme ceci:la source
dictConfig
sous le capot.Définir le nom de l'enregistreur comme
requests
ourequests.urllib3
ne fonctionnait pas pour moi. J'ai dû spécifier le nom exact de l'enregistreur pour changer le niveau d'enregistrement.Tout d'abord, voyez quels enregistreurs vous avez définis, pour voir ceux que vous souhaitez supprimer
Et vous verrez quelque chose comme ça:
{...'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> ...}
Configurez ensuite le niveau pour l'enregistreur exact:
la source
Si vous avez un fichier de configuration, vous pouvez le configurer.
Ajoutez urllib3 dans la section des enregistreurs:
Ajouter la section logger_urllib3:
la source
Cette réponse est ici: Python: comment supprimer les instructions de journalisation des bibliothèques tierces?
Vous pouvez laisser le niveau de journalisation par défaut pour basicConfig, puis vous définissez le niveau DEBUG lorsque vous obtenez l'enregistreur pour votre module.
la source
la source
Les conseils de Kbrose sur la recherche de l'enregistreur générant des messages de journal ont été extrêmement utiles. Pour mon projet Django, j'ai dû trier 120 journaux différents jusqu'à ce que je trouve que c'était la
elasticsearch
bibliothèque Python qui me posait des problèmes. Selon les conseils de la plupart des questions, je l'ai désactivé en ajoutant ceci à mes enregistreurs:Publier ici au cas où quelqu'un d'autre verrait les messages de journal inutiles passer à chaque fois qu'ils exécutent une requête Elasticsearch.
la source
simple: il suffit d'ajouter
requests.packages.urllib3.disable_warnings()
aprèsimport requests
la source
INFO
.Je ne sais pas si les approches précédentes ont cessé de fonctionner, mais en tout cas, voici une autre façon de supprimer les avertissements:
Fondamentalement, l'ajout d'une variable d'environnement dans le contexte de l'exécution du script.
De la documentation: https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings
la source