본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] Python 로깅 설정 완벽 가이드 - 로그도 개발의 품질입니다

by Papa Martino V 2025. 7. 27.
728x90

Python 로깅 설정 완벽 가이드 - 로그도 개발의 품질입니다
[PYTHON] Python 로깅 설정

 

로깅(logging)은 소프트웨어의 심장과 같은 기능입니다. 로그는 버그를 추적하고, 시스템 상태를 모니터링하며, 디버깅과 보안 감사까지 폭넓게 활용됩니다. Python은 표준 라이브러리로 logging 모듈을 제공하여 매우 강력하면서도 유연한 로그 시스템을 구현할 수 있습니다.

1. 왜 로깅이 필요한가요?

  • 버그 발생 시 추적 경로 확보
  • 운영 환경에서의 서비스 상태 모니터링
  • 사용자 행동이나 요청 기록
  • 보안 사고 분석용 기록 저장

2. Python 로깅의 기본 구조

Python logging은 Logger, Handler, Formatter, Level 네 가지 구성요소로 이루어져 있습니다.

구성 요소 설명
Logger 로그 메시지를 만드는 객체
Handler 어디에 로그를 보낼지 결정 (콘솔, 파일, 이메일 등)
Formatter 로그 메시지의 출력 형식 지정
Level 로그의 심각도 지정 (DEBUG, INFO, WARNING, ERROR, CRITICAL)

3. 기본 설정 예제

import logging

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s [%(levelname)s] %(message)s'
)

logging.debug("디버그 메시지입니다.")  # 출력 안 됨
logging.info("정보 메시지입니다.")
logging.warning("경고 메시지입니다.")

이 기본 설정은 로그 레벨을 INFO로 설정하고, 날짜/레벨/메시지를 포함해 콘솔에 출력합니다.

4. 파일에 로그 저장하기

logging.basicConfig(
    filename='app.log',
    level=logging.DEBUG,
    format='%(asctime)s [%(levelname)s] %(message)s'
)

filename 파라미터를 통해 로그를 파일에 저장할 수 있습니다. 운영 환경에서는 대부분 파일 또는 로그 서버로 기록합니다.

5. 핸들러를 이용한 고급 설정

logger = logging.getLogger('my_app')
logger.setLevel(logging.DEBUG)

file_handler = logging.FileHandler('my_app.log')
stream_handler = logging.StreamHandler()

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter)

logger.addHandler(file_handler)
logger.addHandler(stream_handler)

logger.info("이 메시지는 콘솔과 파일 모두에 기록됩니다.")

이 구성은 핸들러를 별도로 지정해 콘솔과 파일 모두에 로그를 기록하는 방식입니다.

6. 로그 레벨 설명

레벨 숫자 의미 사용 시점
DEBUG 10 디버깅용 상세 정보 개발 중
INFO 20 일반적인 정보 서비스 상태 체크
WARNING 30 주의가 필요한 상황 잠재적 위험 발생
ERROR 40 에러 발생 예외 처리 실패 시
CRITICAL 50 치명적 오류 시스템 장애

7. 실전 팁

  • 로깅 설정은 항상 한 곳에서 중앙 집중화하자.
  • 운영 환경과 개발 환경에 따라 설정을 분리하는 것이 좋다.
  • 로그 파일은 주기적으로 로테이션(log rotation) 하자 (logging.handlers 참고).
  • 보안 정보를 로그에 기록하지 않도록 주의!

8. 자주 발생하는 문제 해결

  • 로그가 출력되지 않아요: 로그 레벨이 너무 높게 설정된 경우
  • 콘솔에는 안 나오고 파일에만 나와요: StreamHandler 누락 여부 확인
  • 한글 깨짐: 파일 핸들러에 encoding='utf-8' 옵션 추가

9. 마무리

Python의 로깅 시스템은 매우 강력하면서도 유연합니다. 개발 환경에서 디버깅부터 운영 환경의 이상 탐지까지 로깅은 없어서는 안 될 핵심 도구입니다. 지금 바로 여러분의 프로젝트에 logging을 체계적으로 적용해보세요!


출처: Python 공식문서 logging 모듈 (https://docs.python.org/3/library/logging.html)

728x90