root
키와 빈 ''
로거가 config dict에서 참조 될 때 사용되는 구성을 확인하기 위해 빠른 샘플을 만들었습니다 .
import logging.config
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'fmt1': {
'format': '[FMT1] %(asctime)-15s %(message)s',
},
'fmt2': {
'format': '[FMT2] %(asctime)-15s %(message)s',
}
},
'handlers': {
'console1': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'fmt1',
},
'console2': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'fmt2',
},
},
# First config for root logger: console1 -> fmt1
'root': {
'handlers': ['console1'],
'level': 'DEBUG',
'propagate': True,
},
'loggers': {
# Second config for root logger: console2 -> fmt2
'': {
'handlers': ['console2'],
'level': 'DEBUG',
'propagate': True,
},
},
}
logging.config.dictConfig(LOGGING)
l1 = logging.getLogger()
l2 = logging.getLogger('')
root = logging.root
l1.info("l1")
l2.info("l2")
root.info("root logger")
다음 결과를 인쇄합니다.
[FMT1] 2018-12-18 17:24:47,691 l1
[FMT1] 2018-12-18 17:24:47,691 l2
[FMT1] 2018-12-18 17:24:47,691 root logger
root
키 아래의 구성 이 가장 높은 우선 순위를 가짐을 나타냅니다 . 블록이 제거되면 결과는 다음과 같습니다.
[FMT2] 2018-12-18 17:25:43,757 l1
[FMT2] 2018-12-18 17:25:43,757 l2
[FMT2] 2018-12-18 17:25:43,757 root logger
두 경우 모두 세 개의 로거 ( l1
, l2
및 root
) 가 모두 동일한 로거 인스턴스 인 루트 로거를 참조 하는지 디버그하고 확인할 수있었습니다 .
저와 같이 루트 로거를 구성하는 두 가지 다른 방법으로 혼란스러워했던 다른 사람들에게 도움이되기를 바랍니다.