본문 바로가기
source-code/Django

Books App _ log 만들기

by mattew4483 2020. 12. 30.
728x90
반응형

행요 서비스를 개발할 때, 정말 수백 번도 넘는 에러 페이지와 마주했다.

특히 배포 환경에서 에러 페이지나 문구를 만나면... 정말로 대략 난감.

 

어디가 잘못되었는지를 알아야 고칠 텐데, 이를 가르쳐 주지도 않는다.

그냥 두루뭉실하게 몇백 번 에러가 났다... 고 알려주는 게 끝.

이는 배포 환경에서뿐만 아니라 개발 단계에서도 마찬가지.

이럴 때 유용하게 쓸 수 있는 log를 만들어보자.


log는 쉽게 말해 python의 print라 생각하면 된다.

python에서 말도 안 되는 코드를 작성하거나, syntax를 빼먹는 등의 실수를 해 에러가 나는 경우는 너무나도 빈번하다.

이때 우리는 작성한 코드의 중간중간에 print()를 넣어 현재까지의 항목이 잘 출력되고 있는가를 확인한다.

 

django 역시 파이썬 기반의 언어!

실행 시 django는 settings.py에 정의된 LOGGING 항목을 참고해 로깅과 관련된 설정을 처리한다.

즉 적절한 로거를 획득하면 원하는 로그를 기록하는 게 가능하단 말씀.

 

settings.py

LOGGING = {
    'version': 1,
    # dictConfig version 1 형식. 현재는 버전이 하나뿐이다.
    'disable_existing_loggers': False,
    # '기존 로거를 비활성화 할 것인가?' -> False!

    # formatters -> 텍스트로 표현되는 로그 레코드를 어떤 포맷을 사용해 적을 것인가!
    'formatters': {
        'verbose': {
        # verbose 포맷터 -> [로그 기록 시간], 로그 레벨 이름, [로거이름:라인번호], 로그 메시지 순 출력
            'format': '[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s',
            'datefmt': '%d/%b/%Y %H:%M:%S'
            # 날짜/월/년/분/초 형식으로 출력
        },
    },
   
    # handlers -> 로거에 있는 메시지에 무슨 작업을 할 것인가!(메시지를 어디 기록할 것인가)
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            # FileHandler 클래스 사용
            'filename': os.path.join(BASE_DIR, 'logs', 'mysite.log'),
            'formatter': 'verbose',
            # 포맷터는 위해서 사용한 verbose
        },
    },

    # loggers -> 로그 메시지를 처리하기 위해 메시지를 담아두는 저장소!
    'loggers': {
        'django': {
        # default로 설정된 django 로거
            'handlers':['file'],
            'level': 'DEBUG',
        },
        'polls': {
        # polls라는 로거를 새롭게 정의
            'handlers': ['file'],
            # DEBUG 및 그 이상의 파일을 file핸들러에게 보냄
            'level': 'DEBUG',
            # 정의한 level을 오버라이딩
        },
    },
}

 

이러한 로그를 작성할 부분을 views에서 정해주면 된다!

polls앱에서 투표를 했을 때 로그가 작성되도록 해보자.

 

views.py

우선 logging을 import.

그리고 그 밑에 logger을 지정해준다.

 

이후 vote함수가 실행될 때 로그를 작성하도록 id와 함께 작성!

 

마지막으로 logs파일을 만든 후 runserver로 실행!

그럼 이렇게 자동적으로 해당 파일이 만들어지고, 로그가 적힘을 확인할 수 있다.

무진장 정신없다!

728x90
반응형

'source-code > Django' 카테고리의 다른 글

Blogs App _ tag 기능  (0) 2021.01.01
Blogs App  (0) 2020.12.31
Books App _ home 만들기  (0) 2020.12.30
Books App _ Template 상속하기  (0) 2020.12.30
Books App  (0) 2020.12.29