본문 바로가기
Project

[DailyCode#2] Django Logging 설정

by 팅코벨 2021. 6. 1.
728x90

#영원히 끝나지 않는 졸업과제...

 

사용자 클릭 Log를 받아서 추천 결과에 대한 검증을 하고자 Django 로깅을 사용하려고 한다.

다른 논문에서 사용한 '결과에 대한 검증' 부분을 빌려 아래와 같이 평가하기로 하였다.

(마음에드는 가게가x)버튼을 누르면 -> 결과에 대한 불만족
추천된 가게를 눌러서 더 많은 추천을 받게 되면 -> 결과에 대한 만족

 

이제 장고에 Log를 적용해보자!

Django Documentation에서 보면 기본 틀이 나와있다. 

#(settings.py)
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',		#수정필요(선택가능)
            'class': 'logging.FileHandler',
            'filename': '/path/to/django/debug.log',	#수정필요
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],	#수정필요
            'level': 'DEBUG',		#수정필요(선택가능)
            'propagate': True,		#True,False선택
        },
    },
}

이제 안의 내용들을 수정해야하는데, 각 요소들을 하나씩 살펴보면 다음과 같다.

 

filters

필터는 특정 조건에서 로그를 출력하거나 출력하지 않기 위해서 사용된다. require_debug_false 필터는 DEBUG=False인지를 판단하는 필터이고, require_debug_true는 DEBUG=True 인지를 판단하는 필터이다. 조건 판단을 위해 각각 django.utils.log.RequireDebugFalse와 django.utils.log.RequireDebugTrue 클래스를 호출하여 DEBUG 항목의 True, False를 판단한다.

 

 

handlers

핸들러는 로그의 출력 방법을 정의한다. 다음은 DEFAULT_LOGGING 설정에 등록된 핸들러이다.

  • console - 콘솔에 로그를 출력한다. 로그 레벨이 INFO 이상이고 DEBUG=True일 때만 로그를 출력한다.
  • django.server - python manage.py runserver로 작동하는 개발 서버에서만 사용하는 핸들러로 콘솔에 로그를 출력한다.
  • mail_admins - 로그 내용을 이메일로 전송하는 핸들러로, 로그 레벨이 ERROR 이상이고 DEBUG=False 일때만 로그를 전송한다. 핸들러 사용 조건은 환경설정 파일에 ADMINS라는 항목을 추가하고 관리자 이메일을 등록해야 한다(ADMINS = ['pahkey@gmail.com']). 이메일 발송을 위한 SMTP 설정도 필요하다.

 

loggers

로그를 출력하는 프로그램에서 사용하는 로거(logger)의 이름을 의미한다. 

  • django - 장고 프레임워크가 사용하는 로거로 로그 레벨이 INFO 이상일 경우에만 로그를 출력한다.
  • django.server - 개발 서버가 사용하는 로거로 로그 레벨이 INFO 이상일 경우에만 로그를 출력한다. 'propagate': False의 의미는 django.server가 출력하는 로그를 django 로거로 전달하지 않는다는 의미이다. 만약 'propagate': True로 설정하면 최상위 패키지명이 django로 동일하기 때문에 django.server 하위 패키지에서 출력하는 로그가 django.server 로거에도 출력되고 django 로거에도 출력되어 이중으로 출력될 것이다.

 

 

settings.py 최종 추가 code!

 

#장고 로그 받기
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
    },
    'handlers': {
        'file': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': 'debug.log',
        },
        'mail_admins': {
            'level': 'INFO',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django': {
            'handlers': ['mail_admins'],   #DEBUG=False일때만 가능
            'level': 'INFO',
            'propagate': False,
        },
    },
}

ADMINS = ['본인이메일주소 입력']
DEBUG = False

잘 적용됬는지는 배포 후,,,, 돌아오겠다.(아직 배포하려면 막막함;_;)


🔗참고 사이트 

https://docs.djangoproject.com/en/3.2/topics/logging/

 

Logging | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

https://wikidocs.net/77522#1-logging

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

 

728x90
반응형

댓글