혼자 정리

logging 기초 사용법 본문

파이썬

logging 기초 사용법

tbonelee 2021. 10. 1. 23:46
  • 표준 라이브러리 모듈
  • 다음 컨셉을 포함
    • 로그로 저장하고 싶은 message
    • 다음 각 함수에 매칭되는 우선순위 레벨 : debug(), info(), warn(), error(), critical()
    • 모듈과 연결된 logger객체
    • 파일, 터미널, db 등에 메세지를 기록하는 Handler
    • 출력물 생성하는 Formatters
    • input에 따라 결정을 내리는 Filters

기본적인 동작

ex)

>>> import logging
>>> logging.debug("Looks like rain")
>>> longging.info("And hail")
>>> logging.warning("Did I hear thunder?")
WARNING:root:Did I hear thunder?
>>> logging.error("Was that lightning?")
ERROR:root:Was that lightning?
>>> logging.critical("Stop fencing and get inside!")
CRITICAL:root:Stop fencing and get inside!

출력 레벨 설정

  • 어떤 priority level 이상의 로그만 출력할 것인지 기본적으로 설정되어 있음

    • 위 예시의 경우 WARNING으로 셋팅된 경우

    • basicConfig()을 통해 디폴트 level을 변경할 수 있음

        >>> import logging
        >>> logging.basicConfig(level=loggin.DEBUG)
        >>> logging.debug("It's raining again")
        DEBUG:root:It's raining again
        >>> logging.info("With hail the size of hailstones")
        INFO:root:With hail the size of hailstones

파일에 출력하기

  • handler를 통해 메세지를 어디에 출력할지 설정할 수 있음

  • log file에 출력하려는 경우 다음과 같이 가능

      >>> import logging
      >>> logging.basicConfig(level='DEBUG', filename='blue_ox.log')
      >>> logger = logging.getLogger('bunyan')
      >>> logger.debug("Where's my axe?")
      >>> logger.warning("I need my axe")
      >>>
    • blue_ox.log에 기록됨

        DEBUG:bunyan:Where's my axe?
        WARNING:bunyan:I need my axe
  • cf) FileHandler, StreamHandler 같은 클래스의 핸들러가 있고 basicConfigfilename인자가 들어오면 FileHandler가 파일 출력을 처리해준다.

  • cf2) 각 레벨들은 logging클래스 안에 int 변수로 존재(ex. DEBUG=10). level인자에 logging.DEBUG같이 넘겨줄 수도 있고, 스트링인 'DEBUG'를 넘겨줘도 알아서 해석해준다.

파일 출력시 append하지 않게 하기

  • filemode'w'로 설정
logging.basicConfig(fileName='example.log', filemode='w', level=logging.DEBUG)

출력 포맷 변경

ex)

>>> import logging
>>> fmt = '%(asctime)s %(levelname)s %(lineno)s %(message)s'
>>> logging.basicConfig(level='DEBUG', format=fmt)
>>> logger = logging.getLogger('bunyan')
>>> logger.error("Where's my other plaid shirt?")
2014-04-08 23:13:59,899 ERROR 1 Where's my ohter plaid shirt?

인코딩

  • basicConfig에서 encoding인자로 설정
    • 설정하지 않으면 open()에서 사용되는 디폴트 값이 사용됨
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG

'파이썬' 카테고리의 다른 글

with 구문의 효과  (0) 2021.10.22