기본적으로 Requests python 라이브러리는 다음 행을 따라 콘솔에 로그 메시지를 작성합니다.
Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606
일반적으로이 메시지에 관심이 없으며 사용하지 않으려 고합니다. 해당 메시지를 무음으로 만들거나 요청의 세부 정보를 줄이는 가장 좋은 방법은 무엇입니까?
답변
요청 의 로깅 수준 을 구성하는 방법을 찾았습니다 . 표준 로깅 모듈을 통해 수행됩니다 . 적어도 경고가 아닌 한 메시지를 로그하지 않도록 구성하기로 결정했습니다.
import logging
logging.getLogger("requests").setLevel(logging.WARNING)
urllib3 라이브러리 (일반적으로 요청에 의해 사용됨)에도이 설정을 적용하려면 다음을 추가하십시오.
logging.getLogger("urllib3").setLevel(logging.WARNING)
답변
(깊게 중첩 된) 모듈의 로깅을 수정하는 방법을 찾고자한다면 logging.Logger.manager.loggerDict
모든 로거 객체의 사전을 얻는 데 사용 하십시오. 리턴 된 이름은 다음에 대한 인수로 사용될 수 있습니다 logging.getLogger
.
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)
주석의 user136036에 따라이 메소드는 위의 스 니펫을 실행할 때 존재하는 로거 만 표시합니다. 예를 들어, 클래스를 인스턴스화 할 때 모듈이 새 로거를 작성하는 경우 클래스를 작성한 후 이름을 인쇄하려면 이 스 니펫 을 넣어야합니다 .
답변
import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)
이런 식으로 urllib3의 level = INFO 메시지가 로그 파일에 표시되지 않습니다.
따라서 로그 메시지에 대해 level = INFO를 계속 사용할 수 있습니다. 사용중인 라이브러리에 대해이를 수정하십시오.
답변
내가 당신과 비슷한 문제를 겪은 후, 내가 일주일 또는 이틀 전에 쓴 문서 섹션을 복사 / 붙여 보겠습니다.
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')
답변
누구든지 logging.config.dictConfig
다음과 같이 사전에서 요청 라이브러리 로그 레벨을 변경할 수 있습니다.
'loggers': {
'': {
'handlers': ['file'],
'level': level,
'propagate': False
},
'requests.packages.urllib3': {
'handlers': ['file'],
'level': logging.WARNING
}
}
답변
로거 이름을 설정 requests
하거나 requests.urllib3
작동하지 않았습니다. 로깅 레벨을 변경하려면 정확한 로거 이름을 지정해야합니다.
먼저 어떤 로거를 정의했는지 확인하고 제거하려는 로거를 확인하십시오.
print(logging.Logger.manager.loggerDict)
그리고 당신은 다음과 같은 것을 보게 될 것입니다 :
{...'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> ...}
그런 다음 정확한 로거 레벨을 구성하십시오.
'loggers': {
'': {
'handlers': ['default'],
'level': 'DEBUG',
'propagate': True
},
'urllib3.connectionpool': {
'handlers': ['default'],
'level': 'WARNING',
'propagate' : False
},
답변
구성 파일이 있으면 구성 할 수 있습니다.
로거 섹션에 urllib3을 추가하십시오.
[loggers]
keys = root, urllib3
logger_urllib3 섹션을 추가하십시오.
[logger_urllib3]
level = WARNING
handlers =
qualname = requests.packages.urllib3.connectionpool