Django 설정 기본 로깅
Django 설치를 위해 "기본"로거를 설정하는 방법을 알아낼 수없는 것입니다. .NET에서 Django 1.3의 새로운 LOGGING
설정 을 사용하고 싶습니다 settings.py
.
Django Logging Doc의 예제를 표현하지만 특정 로거에 대한 로깅을 수행하는 만 설정하는 것처럼 보입니다. 예제의 경우 'django', 'django.request'및 'myproject.custom'이라는 로거에 대한 설정을 설정합니다.
내가 원하는 것은 기본적으로 logging.handlers.RotatingFileHandler
모든 로거를 처리 할 수 있도록 을 설정하는 것입니다. 즉, 내 프로젝트 어딘가에 새 모듈을 만들고 다음과 같이 표시 my_app_name.my_new_module
되면 작업을 수행 할 수 있고 모든 로깅이 회전하는 파일 로그로 이동합니다.
# In file './my_app_name/my_new_module.py'
import logging
logger = logging.getLogger('my_app_name.my_new_module')
logger.debug('Hello logs!') # <-- This should get logged to my RotatingFileHandler that I setup in `settings.py`!
알아 냈어 ...
모두 포괄로 참조하여 '모두 포괄'로거를 설정합니다 : ''
.
예를 들어, 다음 설정에서는 저장 될 로그 이벤트를 logs/mylog.log
제외 하고 모든 로그 이벤트가에 django.request
저장 logs/django_request.log
됩니다. 내 로거 'propagate'
에 False
대해 로 설정되어 있기 때문에 django.request
로그 이벤트는 '모두 포괄'로거에 도달하지 않습니다.
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
},
},
'handlers': {
'default': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename': 'logs/mylog.log',
'maxBytes': 1024*1024*5, # 5 MB
'backupCount': 5,
'formatter':'standard',
},
'request_handler': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename': 'logs/django_request.log',
'maxBytes': 1024*1024*5, # 5 MB
'backupCount': 5,
'formatter':'standard',
},
},
'loggers': {
'': {
'handlers': ['default'],
'level': 'DEBUG',
'propagate': True
},
'django.request': {
'handlers': ['request_handler'],
'level': 'DEBUG',
'propagate': False
},
}
}
답변 , Chris 에서 말했듯 이 기본 로거를 정의하는 한 가지 옵션은 빈 것입니다.
의도 된 방법 그러나은 root
로깅 구성 사전 의 키 아래에 특수 로거를 정의하는 것이라고 생각합니다 . 제공 문서 에서 이것을 찾았습니다 .
루트 -이것은 루트 로거의 구성입니다.
propagate
설정을 적용 할 수 없다는 점을 제외하고 구성 처리는 모든 로거와 동일합니다 .
root
키 를 사용하도록 변경된 답변의 구성은 다음과 같습니다 .
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
},
},
'handlers': {
'default': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename': 'logs/mylog.log',
'maxBytes': 1024*1024*5, # 5 MB
'backupCount': 5,
'formatter':'standard',
},
'request_handler': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename': 'logs/django_request.log',
'maxBytes': 1024*1024*5, # 5 MB
'backupCount': 5,
'formatter':'standard',
},
},
'root': {
'handlers': ['default'],
'level': 'DEBUG'
},
'loggers': {
'django.request': {
'handlers': ['request_handler'],
'level': 'DEBUG',
'propagate': False
},
}
}
공정하게 말하면 두 구성 간의 동작 차이를 볼 수 없습니다. 빈 문자열 키로 로거를 정의하면 루트 로거 logging.getLogger('')
가 반환 되기 때문에 루트 로거가 수정되는 것으로 보입니다 .
내가 선호하는 유일한 이유 'root'
이상은 ''
이 루트 로거 수정에 대한 명시적인 것입니다. 궁금한 경우 루트 항목이 마지막으로 처리되기 때문에 둘 다 정의하면 'root'
재정의 ''
됩니다.
import logging
logger = logging.getLogger(__name__)
추가 후 :
logging.basicConfig(
level = logging.DEBUG,
format = '%(name)s %(levelname)s %(message)s',
)
형식을 다음과 같이 변경할 수 있습니다.
format = '"%(levelname)s:%(name)s:%(message)s" ',
또는
format = '%(name)s %(asctime)s %(levelname)s %(message)s',
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
) 가 모두 동일한 로거 인스턴스 인 루트 로거를 참조 하는지 디버그하고 확인할 수있었습니다 .
저와 같이 루트 로거를 구성하는 두 가지 다른 방법으로 혼란스러워했던 다른 사람들에게 도움이되기를 바랍니다.
참고 URL : https://stackoverflow.com/questions/5438642/django-setup-default-logging
'IT' 카테고리의 다른 글
'Access-Control-Allow-Origin'헤더에 여러 값이 포함되어 있습니다. (0) | 2020.08.30 |
---|---|
iPhone / iPad 사용자를 : hover 가상 클래스를 강제로 무시할 수 있습니까? (0) | 2020.08.30 |
.h 또는 .c 파일에 포함되어 있습니까? (0) | 2020.08.30 |
키 체인 항목을 고유하게 만드는 것은 무엇입니까 (iOS에서)? (0) | 2020.08.30 |
연결 목록의 중간에 삽입하는 이유 O (1)? (0) | 2020.08.30 |