로거에 대한 핸들러를 찾을 수 없습니다.
저는 파이썬 초보자입니다. 나는 파이썬에 로그인을 시도하고 있었고 로거 인스턴스를 통해 경고를 인쇄하려고 시도하는 동안 로거 오류에 대한 처리기를 찾을 수 없음을 발견했습니다 . 아래는 내가 시도한 코드입니다.
import logging
logger=logging.getLogger('logger')
logger.warning('The system may break down')
그리고이 오류가 발생 합니다. 로거 "로거"에 대한 처리기를 찾을 수 없습니다.
나를 혼란스럽게하는 것은 처음에를 사용하여 경고를 인쇄하려고 할 때 logging
다음을 통해 logger
잘 작동한다는 것입니다.
>>> import logging
>>> logging.warning('This is a WARNING!!!!')
WARNING:root:This is a WARNING!!!!
>>>
>>> logger.warning('WARNING!!!!')
WARNING:logger:WARNING!!!!
누군가 두 번째 시나리오에서 무슨 일이 일어나고 있는지에 대해 약간의 빛을 던질 수 있습니까?
를 통해 일부 메시지를 로깅하려면 logger
Python에서 하나 이상의 핸들러가 logger
객체에 추가되어야 합니다. 기본적으로 debug
, warn
및 기타 기능 logging
모듈을 호출 basicConfig
차례로을 추가 할 StreamHandler
받는 사람 root logger
.
모듈에 대해 작성중인 로거 객체에 필요한 핸들러를 추가하는 것이 항상 권장 됩니다.
멋진 튜토리얼 이있는 공식 Python 문서를 참조 하거나 로깅 모듈의 소스 코드를 직접 확인하는 것이 좋습니다.
간단하게 Python 셸 자체에서 소스를 확인할 수 있습니다.
import logging
import inspect
print(inspect.getsource(logging))
마지막으로를 basicConfig
명시 적으로 호출 하면 문제가 해결됩니다.
import logging
logging.basicConfig()
logger = logging.getLogger('logger')
logger.warning('The system may break down')
logging.basicConfig () 호출 :
>>> import logging
>>> logging.basicConfig()
>>> logger = logging.getLogger('logger')
>>> logger.warning('The system may break down')
WARNING:logger:The system may break down
phd의 답변 외에도 전화 logging.basicConfig()
는 기본 StreamHandler
및 Formatter
. 로깅 기능을 빠르게 갖고 싶다면 충분합니다. basicConfig
몇 가지 인수 를 전달하여 동작을 사용자 지정할 수 있습니다 .
유용한 매개 변수 추가 : 메시지와 함께 타임 스탬프 출력
logger = logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
이것은 대부분의 일회성 요구에 적합합니다. 구성에 대한 더 많은 제어가 필요한 경우 로거의 속성을 직접 정의하여보다 정교한 동작을 추가 할 수 있습니다.
정교한 예 :
basicConfig
기능 을 사용하지 않고
import logging
logger = logging.getLogger("mylogger")
streamHandler = logging.StreamHandler()
streamHandler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
streamHandler.setFormatter(formatter)
logger.addHandler(streamHandler)
logger.info("Files copied")
logger.warning("disk quota exceeded")
>> 2017-12-06 11:11:12, 090 - mylogger - INFO Files copied
>> 2017-12-06 11:11:12, 091 - mylogger - WARNING disk quota exceeded
더 큰 환경에서 다음 단계는 이전에 만든 로거에서 새 로거를 파생하여 먼저 형식을 유지하고 "로그 계층"을 유지하는 것입니다.
logger2 = logging.getLogger("mylogger.new")
logger2.info("New Logger info")
>> 2017-12-06 11:11:12, 091 - mylogger.new - New logger info
A good reference is the logging cookbook: https://docs.python.org/2/howto/logging-cookbook.html
If you get this error when using sentry (No handlers could be found for logger "sentry.errors"
), it could be due to sentry bug for SNI support.
check https://github.com/getsentry/raven-python/issues/523 for more details. a quick workaround is to replace DSN scheme by threaded+requests+https
:
RAVEN_CONFIG = {
'dsn': 'threaded+requests+https://xxxxxxxxxxxx@sentry.example.com/1',
}
ReferenceURL : https://stackoverflow.com/questions/44188270/no-handlers-could-be-found-for-logger
'developer tip' 카테고리의 다른 글
Spring Security의 다중 인증 공급자 (0) | 2021.01.08 |
---|---|
cURL 오류 (7) 해결 방법 : 호스트에 연결할 수 없습니까? (0) | 2021.01.08 |
.NET의 디버그 대 릴리스 (0) | 2021.01.07 |
Rails Migration (MySQL)에서 새 열의 위치를 지정할 수 있습니까? (0) | 2021.01.07 |
Joda-Time을 사용하여 주어진 달의 일수를 어떻게 얻습니까? (0) | 2021.01.07 |