답변:
요청 의 로깅 수준 을 구성하는 방법을 찾았습니다 . 표준 로깅 모듈을 통해 수행됩니다 . 적어도 경고가 아닌 한 메시지를 로그하지 않도록 구성하기로 결정했습니다.
import logging
logging.getLogger("requests").setLevel(logging.WARNING)
urllib3 라이브러리 (일반적으로 요청에 의해 사용됨)에도이 설정을 적용하려면 다음을 추가하십시오.
logging.getLogger("urllib3").setLevel(logging.WARNING)
pysimplesoap
getLogger("urllib3")
메시지를 억제해야합니다.
(깊게 중첩 된) 모듈의 로깅을 수정하는 방법을 찾고자한다면 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에 따라이 메소드는 위의 스 니펫을 실행할 때 존재하는 로거 만 표시합니다. 예를 들어, 클래스를 인스턴스화 할 때 모듈이 새 로거를 작성하는 경우 클래스를 작성한 후 이름을 인쇄하려면 이 스 니펫 을 넣어야합니다 .
urllib3
사용하면 로그 메시지를 무음으로 만드는 데 도움이되었습니다 boto3
. 이러한 경우 로거는입니다 botocore.vendored.requests.packages.urllib3
. 그래서 나는 이것을 사용했습니다 : logging.getLogger("botocore.vendored.requests.packages.urllib3").setLevel(logging.WARNING)
마침내 메시지를 제거했습니다.
APScheduler
이 호출 할 때 와 같이 나중에 호출 할 클래스 내에 로거를 작성할 때이 기능이 작동 하지 않습니다 BackgroundScheduler.BackgroundScheduler()
.
import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)
이런 식으로 urllib3의 level = INFO 메시지가 로그 파일에 표시되지 않습니다.
따라서 로그 메시지에 대해 level = INFO를 계속 사용할 수 있습니다. 사용중인 라이브러리에 대해이를 수정하십시오.
setLevel(logging.WARNING)
가능한 경고 및 오류 메시지도 기록 하는 데 사용 하는 것이 좋습니다 .
내가 당신과 비슷한 문제를 겪은 후, 내가 일주일 또는 이틀 전에 쓴 문서 섹션을 복사 / 붙여 보겠습니다.
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
}
}
dictConfig
후드 아래에서 사용 합니다.
로거 이름을 설정 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
},
이 답변은 여기에 있습니다 : Python : 타사 라이브러리의 로깅 문을 억제하는 방법?
basicConfig에 대한 기본 로깅 레벨을 그대로두고 모듈의 로거를 가져올 때 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의 지침은 매우 유용했습니다. Django 프로젝트의 경우 120 개의 다른 로거를 정렬해야했습니다. elasticsearch
파이썬 라이브러리가 문제가되는 것을 알았 습니다. 대부분의 질문에 대한 지침에 따라 로거에 이것을 추가하여 비활성화했습니다.
...
'elasticsearch': {
'handlers': ['console'],
'level': logging.WARNING,
},
...
다른 사람이 Elasticsearch 쿼리를 실행할 때마다 도움이되지 않는 로그 메시지가 표시되는 경우 여기에 게시하십시오.
이전 방법이 작동을 멈췄는지 확실하지 않지만 어쨌든 경고를 제거하는 또 다른 방법이 있습니다.
PYTHONWARNINGS="ignore:Unverified HTTPS request" ./do-insecure-request.py
기본적으로 스크립트 실행 컨텍스트에서 환경 변수 추가
설명서에서 : https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings