Kaip išjungti žurnalo pranešimus iš užklausos bibliotekos?

Pagal nutylėjimą, „python“ užklausų biblioteka įrašo žurnalo pranešimus konsolei pagal eilutes:

 Starting new HTTP connection (1): example.com http://example.com:80 "GET / HTTP/1.1" 200 606 

Aš paprastai nesidomėjau šiais pranešimais ir norėčiau juos išjungti. Koks būtų geriausias būdas nutildyti šiuos pranešimus arba sumažinti prašymų verbalumą?

287
14 июня '12 в 11:52 2012-06-14 11:52 aknuds1 nustatytas birželio 14 d. 12 val. 11:52 2012-06-14 11:52
@ 10 atsakymų

Sužinojau, kaip pritaikyti užklausos priežiūros lygį, atliktą naudojant standartinį registravimo modulį. Nusprendžiau konfigūruoti, kad neužregistruotų pranešimų, jei jie nėra bent įspėjimai:

 import logging logging.getLogger("requests").setLevel(logging.WARNING) 

Jei norite taikyti šį parametrą urllib3 bibliotekai (paprastai naudojama užklausoms), pridėkite:

 logging.getLogger("urllib3").setLevel(logging.WARNING) 
462
14 июня '12 в 11:59 2012-06-14 11:59 atsakymas pateikiamas aknuds1 birželio 14 d. 12 val. 11:59 2012-06-14 11:59

Jei atvykote čia, kad rastumėte būdą, kaip pakeisti bet kurio (galbūt giliai įdėto) modulio registraciją, naudokite logging.Logger.manager.loggerDict kad gautumėte visų žurnalo objektų žodyną. logging.getLogger pavadinimai gali būti naudojami kaip logging.getLogger argumentas:

 import requests import logging for key in logging.Logger.manager.loggerDict: print(key) # requests.packages.urllib3.connectionpool # requests.packages.urllib3.util # requests.packages # requests.packages.urllib3 # requests.packages.urllib3.util.retry # PYREADLINE # requests # requests.packages.urllib3.poolmanager logging.getLogger('requests').setLevel(logging.CRITICAL) # Could also use the dictionary directly: # logging.Logger.manager.loggerDict['requests'].setLevel(logging.CRITICAL) 

Atminkite, kad šiuo atveju rodomi tik tie naudotojai, kurie egzistuoja vykdant aukščiau minėtą fragmentą, yra tik registruoti vartotojai. Pavyzdžiui, jei modulis sukuria naują žurnalą kurdamas klasės egzempliorių, tuomet turite sukurti šį fragmentą po klasės sukūrimo, kad išspausdintumėte jo pavadinimą.

68
24 марта '16 в 22:37 2016-03-24 22:37 atsakymą pateikė kbrose kovo 24 d. 16, 22:37 2016-03-24 22:37
 import logging urllib3_logger = logging.getLogger('urllib3') urllib3_logger.setLevel(logging.CRITICAL) 

Taigi, visi pranešimai = lygmuo INFO iš urllib3 nebus įrašyti žurnalo faile.

Taigi, galite toliau naudoti = INFO lygį žurnalo pranešimams ... tiesiog pakeiskite tai bibliotekai, kurią naudojate.

27
12 февр. Atsakymą pateikė shaolin , vasario 12 d. 2014-02-12 13:55 '14 at 13:55 2014-02-12 13:55

Leiskite nukopijuoti / įklijuoti dokumentaciją, kurią parašiau prieš savaitę ar dvi savaites, po problemos, panašios į jūsų:

 import requests import logging # these two lines enable debugging at httplib level (requests->urllib3->httplib) # you will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA. # the only thing missing will be the response.body which is not logged. import httplib httplib.HTTPConnection.debuglevel = 1 logging.basicConfig() # you need to initialize logging, otherwise you will not see anything from requests logging.getLogger().setLevel(logging.DEBUG) requests_log = logging.getLogger("requests.packages.urllib3") requests_log.setLevel(logging.DEBUG) requests_log.propagate = True requests.get('http://httpbin.org/headers') 
14
16 апр. atsakymas pateikiamas sorin 16 balandžio. 2013-04-16 20:08 '13, 08:08 pm 2013-04-16 20:08

Bet kuriam naudotojui, kuris naudoja logging.config.dictConfig , galite pakeisti užklausos žurnalo lygį žodyne taip:

 'loggers': { '': { 'handlers': ['file'], 'level': level, 'propagate': False }, 'requests.packages.urllib3': { 'handlers': ['file'], 'level': logging.WARNING } } 
10
01 февр. Atsakymą pateikė TheHerk 01 Feb. 2016-02-01 22:52 '16 at 22:52 pm 2016-02-01 22:52

Registratoriaus, kaip requests ar requests.urllib3 vardo nustatymas.urllib3 man neveikia. Norint pakeisti registravimo lygį, turėjau nurodyti tikslų registratoriaus pavadinimą.

Pirma, pažiūrėkite, kuriuos registratorius nustatėte, kad pamatytumėte, kuriuos norite ištrinti.

 print(logging.Logger.manager.loggerDict) 

Ir pamatysite kažką panašaus:

{...'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>...}

Tada sureguliuokite tikslaus įrašymo įrenginio lygį:

  'loggers': { '': { 'handlers': ['default'], 'level': 'DEBUG', 'propagate': True }, 'urllib3.connectionpool': { 'handlers': ['default'], 'level': 'WARNING', 'propagate' : False }, 
0
06 дек. Atsakymą pateikė Mikko 06 d. 2018-12-06 23:39 '18, 23:39 pm 2018-12-06 23:39

Patarimas, kaip nustatyti, kuris logger generuoja žurnalo pranešimus, yra labai naudingas. Mano „Django“ projektui teko surūšiuoti 120 skirtingų registratorių, kol sužinojau, kad tai Python elasticsearch biblioteka, kuri sukėlė man problemų. Vadovaudamiesi daugelio problemų vadovu, aš jį išjungiau pridėdamas jį į mano registratorius:

  ... 'elasticsearch': { 'handlers': ['console'], 'level': logging.WARNING, }, ... 

Siunčiant čia, jei kas nors mato, kad nereikalingi žurnalo pranešimai atėjo, kai jie pradeda „Elasticsearch“ užklausą.

0
22 нояб. Robert Townley atsakymas lapkričio 22 d 2017-11-22 20:03 '17 at 8:03 pm 2017-11-22 20:03

Jei turite konfigūracijos failą, galite jį pritaikyti.

Pridėti registratoriaus skyriuje urllib3:

 [loggers] keys = root, urllib3 

Pridėti skyrių logger_urllib3:

 [logger_urllib3] level = WARNING handlers = qualname = requests.packages.urllib3.connectionpool 
0
09 июля '17 в 10:34 2017-07-09 10:34 atsakymas į Sankciją pateiktas liepos 09 d. 17, 10:34 2017-07-09 10:34

Nesu tikras, kad ankstesni metodai nustojo veikti, bet bet kokiu atveju dar vienas būdas pašalinti įspėjimus:

 PYTHONWARNINGS="ignore:Unverified HTTPS request" ./do-insecure-request.py 

Iš esmės aplinkos kintamojo pridėjimas scenarijų vykdymo kontekste.

Iš dokumentacijos: https://urllib3.readthedocs.org/en/latest/security.html#disabled-warnings

-1
10 марта '16 в 6:46 2016-03-10 06:46 atsakymas pateikiamas naujienas kovo 10 d. 16:46 2016-03-10 06:46

paprasta: po import requests pridėkite requests.packages.urllib3.disable_warnings()

-1
09 февр. atsakymas pateiktas evandrix 09 vasaris 2016-02-09 05:22 '16 at 5:22 AM 2016-02-09 05:22