Pytest Logging 기능

Sangyeon·2021년 3월 13일
1

Pytest

목록 보기
7/12
post-thumbnail

Pytest Logging 기능 중 로그를 콘솔로 출력하는 방법(Live Log)와 파일에 저장하는 방법에 대해 정리한 포스팅 입니다.

콘솔 출력 - Live Log

참고 : https://docs.pytest.org/en/latest/logging.html#live-logs

설정

Live Log 출력을 위한 pytest.ini 파일 설정은 아래와 같습니다.

[pytest]
log_cli=true
log_cli_level=DEBUG
log_cli_date_format=%Y-%m-%d %H:%M:%S
log_cli_format=%(levelname)-8s %(asctime)s %(name)s::%(filename)s:%(funcName)s:%(lineno)d: %(message)s

log_cli_level

log_cli_level에서 설정한 로그 레벨 이상의 로그 메세지를 출력합니다.

log_cli_format

log_cli_format에서 설정한 포맷으로 로그 메세지를 출력합니다.

  • %(asctime)s : 시간(log_cli_date_format 형태로 출력)
  • %(filename)s : 파일명
  • %(funcName)s : 함수명
  • %(lineno)d : logging call이 발생한 코드의 라인 번호
  • %(name)s : 로그명
    • 로그명을 별도로 설정하지 않으면, 디폴트는 root입니다.
  • %(levelname)s : 로그 레벨
  • %(message)s : 로그 메세지

이 외 출력 형태는 https://greeksharifa.github.io/%ED%8C%8C%EC%9D%B4%EC%8D%AC/2019/12/13/logging/ 에서 3. Format 편리하게 설정하기 를 참고해주세요.

실행 결과

테스트 파일에서 로거 이름을 'test'로 설정하여 실행해보았습니다.

import logging
logger = logging.getLogger('test')


def test_log():
    logger.debug('debug msg')
    logger.info('info msg')
    logger.warning('warning!')
    logger.error('error!!')
    logger.critical('critical!!!')
    
    assert True

콘솔 출력 결과는 아래와 같습니다.

로그 파일 저장

설정

로그를 로그 파일에 저장하고 싶으면, 아래와 같이 pytest.ini 파일 설정을 추가합니다.

[pytest]
log_file=test.log
log_file_level=DEBUG
log_file_date_format=%Y-%m-%d %H:%M:%S
log_file_format=%(levelname)-8s %(asctime)s %(name)s::%(filename)s:%(funcName)s:%(lineno)d: %(message)s

실행 결과

위 콘솔 출력의 예시 테스트 파일로 실행해보았습니다.
설정한 test.log 파일을 열어보니 아래와 같이 로그 저장내역이 확인됩니다.

(로그 메세지 포맷 맨앞을 %(levelname)s로 설정하면, Pycharm에서는 idelog 플러그인에서 설정된 pattern에 따라 highlight 표시를 해주네요)

주의사항

This log file is opened in write mode which means that it will be overwritten at each run tests session.

Live Log 부분에 첨부한 문서에 따르면, ini 파일에서 설정한 로그 파일은 'a'가 아닌 'w' 파일모드로 열리기 때문에 매 테스트 세션 수행 시마다 덮어쓰기가 됩니다.
만약, 'a' 파일모드로 로그 파일을 관리하고 싶다면, 위와 같이 pytest의 ini 파일에서 로그 파일 설정하는 방법이 아니라 logging.config을 이용하여 파이썬 자체 로그 설정을 한 후, 테스트 시 사용할 로거의 fileHandler 파일모드를 'a'로 둬서 로그를 저장하도록 해야 할 것 같습니다.

Reference

profile
I'm a constant learner.

0개의 댓글