728x90

로깅(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
'Artificial Intelligence > 60. Python' 카테고리의 다른 글
| [PYTHON] 가상환경(venv, conda)은 왜 사용하나요? 프로젝트의 독립성과 안전성을 위한 필수 가이드 (0) | 2026.01.28 |
|---|---|
| [PYTHON] pip vs conda : 패키지 관리자의 메커니즘 차이와 상황 별 선택 가이드 (0) | 2026.01.28 |
| [PYTHON] 가상환경 설정 완전 정복 (0) | 2025.07.27 |
| [PYTHON] pathlib으로 더 똑똑하게 파일 처리하기 (0) | 2025.07.26 |
| [PYTHON] 클래스 vs 함수 : 언제 클래스를 사용하고, 언제 함수가 더 적합할까? (0) | 2025.07.26 |