Django Logging

Shortdary·2020년 5월 4일
0

장고는 파이썬에 내장된 로깅모듈을 사용한다.

로깅 요소

로거

로거는 로깅 시스템의 진입점이다. 각각의 로거는 어떤 메세지가 쓰여질 수 있는지에 대해 이름이 붙은 버킷이다.

로거는 로그 레벨을 나눈다.

  • DEBUG: 디버깅을 위한 로우레벨 시스템 정보
  • INFO: 일반적인 시스템 정보
  • WARNING: minor한 문제를 설명하는 정보
  • ERROR: major한 문제를 설명하는 정보
  • CRITICAL: critical한 문제를 설명하는 정보

핸들러

핸들러는 로거의 메세지들에게 무슨 일이 일어날 지 정하는 엔진이다. 특정한 로깅 행동을 설명한다. (화면출력? 파일출력? 등등..)

로거처럼 핸들러 또한 로그 레벨이 있다. 로그 자체의 레벨이 핸들러의 레벨보다 낮다면 핸들러는 이 메세지를 무시한다.

로거는 여러개의 핸들러를 가질 수 있고 각각의 핸들러는 다른 로그 레벨을 가질 수 있다. 이는 메세지의 중요도에 따라 다른 알람을 줄 수 있다.

필터

필터는 로거에서 핸들러로 어떤 로그가 넘겨질 지 추가적인 컨트롤을 제공한다.

필터는 ERROR메세지를 특정한 소스에서는 빠지게 할 수 있다던가, ERROR메세지를 WARNING으로 다운그레이드 한다던가 할 수 있다.

필터는 로거, 핸들러 양쪽에 여러 개 설치 될 수 있다.

포매터

궁극적으로 로그들은 텍스트로 출력되어야 한다. 포매터는 이 텍스트의 포맷을 지정하는 것이다.

로깅 사용하기

로거 이름 짓기

# 특정한 이름의 로거 인스턴스 만들기
logger = logging.getLogger('프로젝트.흠터레스팅.이름')

로거의 이름에서 .은 계층을 나타낸다.프로젝트.흠터레스팅프로젝트.흠터레스팅.이름의 부모이다.

이런 방식은 왜 쓰는가? 프로젝트.흠터레스팅프로젝트.흠터레스팅.이름에서 나오는 모든 로그 메세지들을 잡아낸다.

로깅 호출하기

기본적으로는 로그 레벨에 따른 진입 함수가 있다.

  • logger.debug()
  • logger.info()
  • logger.warning()
  • logger.error()
  • logger.critical()

이외에도 2개의 다른 메소드가 있다.

  • logger.log(): 특정한 로그레벨의 로그 메세지를 발생시킨다.
  • logger.exception(): 현재 예외 스택 프레임에서 ERROR레벨의 로그 메세지를 만든다.

로깅 설정하기

profile
흐엥

0개의 댓글