요청 라이브러리에서 로그 메시지를 비활성화하려면 어떻게 해야 합니까?
기본적으로 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)
urlib3 라이브러리(일반적으로 요청에 의해 사용됨)에도 이 설정을 적용하려면 다음을 추가하십시오.
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)
코멘트내의 유저 136036 에 의하면, 이 메서드는, 상기의 스니펫을 실행했을 때에 존재하는 로거만을 표시하는 것에 주의해 주세요.예를 들어 클래스를 인스턴스화할 때 모듈이 새 로거를 만드는 경우 이름을 인쇄하려면 클래스 작성 후 이 스니펫을 넣어야 합니다.
import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)
이렇게 레벨의 모든 메시지=urlib3의 정보는 로그 파일에 없습니다.
레벨은 계속 사용할 수 있습니다=로그 메시지에 대한 정보...사용 중인 라이브러리에 맞게 수정하십시오.
사용하시는 분logging.config.dictConfig
사전의 요청 라이브러리 로그 수준을 다음과 같이 변경할 수 있습니다.
'loggers': {
'': {
'handlers': ['file'],
'level': level,
'propagate': False
},
'requests.packages.urllib3': {
'handlers': ['file'],
'level': logging.WARNING
}
}
import logging
# Only show warnings
logging.getLogger("urllib3").setLevel(logging.WARNING)
# Disable all child loggers of urllib3, e.g. urllib3.connectionpool
logging.getLogger("urllib3").propagate = False
귀하와 유사한 문제가 발생한 후 약 1~2주 전에 작성한 문서 섹션을 복사하여 붙여넣겠습니다.
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')
로거 이름 설정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
},
컨피규레이션파일이 있는 경우는,
로거 섹션에 urlib3를 추가합니다.
[loggers]
keys = root, urllib3
logger_urlib3 섹션을 추가합니다.
[logger_urllib3]
level = WARNING
handlers =
qualname = requests.packages.urllib3.connectionpool
정답은 다음과 같습니다.Python:서드파티 라이브러리의 로깅 스테이트먼트를 억제하는 방법
basic Config 기본 로깅레벨을 그대로 두고 모듈의 로거를 취득했을 때 DEBUG 레벨을 설정할 수 있습니다.
logging.basicConfig(format='%(asctime)s %(module)s %(filename)s:%(lineno)s - %(message)s')
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.debug("my debug message")
어떤 로거가 로그 메시지를 생성하는지 알아내는 데 Kbrose의 지침은 매우 유용했습니다. 프로젝트를. 의 벌목꾼이라는 을 알 수 있었습니다.elasticsearch
파이썬대부분의 질문의 지침에 따라 로거에 다음을 추가하여 비활성화했습니다.
...
'elasticsearch': {
'handlers': ['console'],
'level': logging.WARNING,
},
...
Elastic Search 쿼리를 실행할 때마다 다른 사용자가 도움이 되지 않는 로그 메시지를 볼 경우에 대비하여 여기에 게시합니다.
이전 접근 방식이 작동을 중지했는지 알 수 없지만, 어떤 경우에도 경고를 제거할 수 있는 다른 방법이 있습니다.
PYTHONWARNINGS="ignore:Unverified HTTPS request" ./do-insecure-request.py
기본적으로 스크립트 실행 컨텍스트에서 환경 변수를 추가합니다.
자료: https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings
그냥 됩니다: 더하면 됩니다.requests.packages.urllib3.disable_warnings()
후에import requests
언급URL : https://stackoverflow.com/questions/11029717/how-do-i-disable-log-messages-from-the-requests-library
'programing' 카테고리의 다른 글
Json 어레이 열이 SQL 행으로 분할됨 (0) | 2023.01.24 |
---|---|
lodash를 angular2 + typescript 어플리케이션으로 Import하는 중 (0) | 2023.01.24 |
CodeIgniter:컨트롤러, 액션, URL 정보를 얻는 방법 (0) | 2023.01.24 |
X초마다 "hello world" 인쇄 (0) | 2023.01.24 |
screenX/Y, clientX/Y 및 pageX/Y의 차이점은 무엇입니까? (0) | 2023.01.24 |