장고에서는 프레임워크 차원에서 로그를 관리해주는 기능을 가지고 있는데 settings.py에 로깅에 관한 정의를 해주면 된다.
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': {
'foramt': '%(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', # 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,
},
}
}
import logging
logger = logging.getLogger('django')
class Post(models.Model):
def get_file_ext(self):
file, ext = os.path.splitext(self.get_file_name())
logger.info(ext)
return ext
위 코드와 같이 사용하면 django logger를 이용해 로그를 출력할 수 있다. 임의의 로거를 정의하고 싶은 경우, settings.py의 logging/loggers 내부에 정의해주면 된다.
로그를 파일로 출력하고 싶은 경우 logging/handlers에 파일의 경로와 파일 명을 같이 정의하면 경로에 로그 파일이 생성된 것을 확인할 수 있다. 하지만 경로는 자동으로 생성해주지 않으므로 경로에 필요한 폴더를 미리 만들어 두어야 한다.
그리고 콘솔 출력이 아닌 파일 출력으로 로그를 확인하고 싶은 경우 Debug 플래그를 False로 바꿔주어야 한다.
Referenced: https://wikidocs.net/77522