DEBUG = False
ALLOWED_HOSTS = ['*'] # 나중에 서버정보는 분리하기 (보안이슈)
DEFAULT_LOGGING = {
'version': 1,
}
DEFAULT_LOGGING = {
'disable_existing_loggers': False,
}
require_debug_false
는 DEBUG =False
를 판단require_debug_true
는 DEBUG =true
를 판단django.utils.log.RequireDebugFalse
와 django.utils.log.RequireDebugTrue
클래스를 호출하여 DEBUG의 True, False 조건을 판단'filters': {
'require_debug_false': { # debug = false 판단
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': { # debug = true 판단
'()': 'django.utils.log.RequireDebugTrue',
},
},
'formatters': {
'django.server': {
'()': 'django.utils.log.ServerFormatter',
'format': '[{server_time}] {message}',
'style': '{',
},
},
python manage.py runserver
로 작동하는 개발 서버에서만 사용하는 핸들러. 콘솔에 로그 출력. 'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
},
'django.server': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'django.server',
},
'<핸들러 이름>': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.<핸들러 종류>'
},
},
'propagate': False
는 django.server가 출력하는 로그를 django 로거로 전달하지 않는다는 의미.'propagate': True
로 설정시, 최상위 패키지명이 django로 동일하기 때문에 django.server 하위 패키지에서 출력하는 로그가 django.server 로거에도 출력되고 django 로거에도 출력되어 이중으로 출력. 'loggers': {
'django': {
'handlers': ['console', '<핸들러 이름>'],
'level': 'INFO',
},
'django.server': {
'handlers': ['django.server'],
'level': 'INFO',
'propagate': False,
},
}
1) settings.py에 logging 설정
# settinfs.py
DEFAULT_LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'formatters': {
'django.server': {
'()': 'django.utils.log.ServerFormatter',
'format': '[{server_time}] {message}',
'style': '{',
},
},
'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
},
'django.server': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'django.server',
},
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
},
'loggers': {
'django': {
'handlers': ['console', 'mail_admins'],
'level': 'INFO',
},
'django.server': {
'handlers': ['django.server'],
'level': 'INFO',
'propagate': False,
},
}
}
2) formatter 추가
'standard': {
'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
},
3) handler 추가 및 설정
DEBUG = False 또는 True
인 운영 환경에서 사용RotatingFileHandler
사용. RotatingFileHandler
는 파일 크기가 설정한 크기보다 커지면 파일 뒤에 인덱스를 붙여서 백업. 로그가 무한히 증가되더라도 일정 개수의 파일로 롤링(Rolling)되어 로그 파일이 너무 커져서 디스크가 꽉 차는 위험 방지.📌로그 롤링(Log Rolling)
: 로그 파일의 크기나 개수에 따라 일정한 기준을 충족하면 새로운 로그 파일을 생성하고, 기존의 로그 파일을 보관하거나 삭제하는 프로세스를 의미
3-1) 핸들러 추가
(... 생략 ...)
LOGGING = {
(... 생략 ...)
'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
},
'django.server': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'django.server',
},
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
'file': {
'level': 'INFO',
'filters': ['require_debug_false'],
'class': 'logging.handlers.<핸들러 종류>',
'filename': BASE_DIR / 'logs/mysite.log',
'maxBytes': 1024*1024*5, # 5 MB
'backupCount': 5,
'formatter': 'standard',
},
},
(... 생략 ...)
}
3-2)핸들러 설정
LOGGING = {
(... 생략 ...)
'loggers': {
'django': {
'handlers': ['console', 'mail_admins', 'file'],
'level': 'INFO',
},
'django.server': {
'handlers': ['django.server'],
'level': 'INFO',
'propagate': False,
},
}
}
DEFAULT_LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'formatters': {
'django.server': {
'()': 'django.utils.log.ServerFormatter',
'format': '[{server_time}] {message}',
'style': '{',
},
'standard': {
'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
},
},
'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
},
'django.server': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'django.server',
},
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
'file': {
'level': 'INFO',
'filters': ['require_debug_false'],
'class': 'logging.handlers.RotatingFileHandler',
'filename': BASE_DIR / 'logs/mysite.log',
'maxBytes': 1024*1024*5, # 5 MB
'backupCount': 5,
'formatter': 'standard',
},
},
'loggers': {
'django': {
'handlers': ['console', 'mail_admins','file'],
'level': 'INFO',
},
'django.server': {
'handlers': ['django.server'],
'level': 'INFO',
'propagate': False,
},
}
}
4) log 디렉토리 생성
# mysite 위치
mkdir logs
5) .gitignore 파일에 logs 디렉토리 추가
6) 함수 호출하기
import logging
logger = logging.getLogger('django')# djanfo logger 실행
def function():
logger.info(ext)
return ext