
1. 로그 레벨별 필터링
파이썬의 로깅 시스템에서는 5가지 로그 레벨을 제공한다.
로그 레벨은 중요도에 따라 로그 메시지를 구분하는 데 사용된다.
✅ 5가지 로그 레벨
- DEBUG: 가장 세밀한 정보 (개발 및 디버깅 시 사용)
- INFO: 일반적인 정보 (프로그램 진행 상황)
- WARNING: 경고 메시지 (문제가 발생할 수 있는 상황)
- ERROR: 에러 발생 (기능에 문제가 생긴 경우)
- CRITICAL: 심각한 에러 (시스템이 중단될 정도의 문제)
2. 로깅 필터링
로그 레벨을 설정하면, 설정한 레벨 이상의 로그 메시지들만 출력된다.
예를 들어, WARNING을 설정하면 ERROR와 CRITICAL만 출력되고, DEBUG나 INFO는 출력되지 않는다.
import logging
# 기본 로깅 설정: WARNING 이상의 로그만 출력
logging.basicConfig(level=logging.WARNING)
logging.debug("This is a DEBUG message.") # 출력되지 않음
logging.info("This is an INFO message.") # 출력되지 않음
logging.warning("This is a WARNING message.") # 출력됨
logging.error("This is an ERROR message.") # 출력됨
logging.critical("This is a CRITICAL message.") # 출력됨필터링의 핵심은 logging.basicConfig(level=logging.<LEVEL>)을 통해 원하는 레벨 이상의 로그만 출력하도록 설정할 수 있다는 것이고 위 예시 코드처럼 설정된 레벨보다 낮은 레벨의 로그는 무시된다.
3. 로그 파일로 저장하기 📂
로깅은 단순히 콘솔에 출력하는 것만이 아니라, 로그를 파일에 저장하는 것도 가능하다.
로그 파일에 저장하면 나중에 로그 분석이나 디버깅에 유용하다.
import logging
# 로그 파일 설정: 로그를 'app.log'라는 파일에 저장
logging.basicConfig(
filename='app.log', # 로그 파일 이름
level=logging.DEBUG, # 로그 레벨
format='%(asctime)s - %(levelname)s - %(message)s', # 로그 포맷
)
logging.debug("This is a DEBUG message.") # 파일에 저장됨
logging.info("This is an INFO message.") # 파일에 저장됨
logging.warning("This is a WARNING message.") # 파일에 저장됨
logging.error("This is an ERROR message.") # 파일에 저장됨
logging.critical("This is a CRITICAL message.") # 파일에 저장됨여기서 logging.basicConfig()는 Python에서 로깅을 설정하는 데 사용되는 기본적인 함수이다.
logging.basicConfig() 함수 사용버 & 매개변수 ▼
로그 포맷 설정하기
format 매개변수를 사용하여 로그 메시지의 형식을 지정할 수 있다.
예를 들어, 시간을 추가하거나 로그 레벨을 넣을 수 있다.
# 로그 포맷 예시
logging.basicConfig(
filename='app.log',
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s', # 시간 + 레벨 + 메시지
)
logging.error("Something went wrong!")출력 예시 (app.log 파일에 기록)
2025-05-03 14:30:15,754 - ERROR - Something went wrong!
로그 파일 자동 백업하기
로그 파일이 커지면 관리가 힘들다.
이때 로그 회전(log rotation)을 사용하면 파일 크기에 맞춰 자동으로 새 파일로 백업을 할 수 있다.
import logging
from logging.handlers import RotatingFileHandler
# 로그 회전 설정: 최대 1MB 크기까지 로그를 저장하고, 그 이후에 자동으로 백업
handler = RotatingFileHandler('app.log', maxBytes=1e6, backupCount=5)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logging.getLogger().addHandler(handler)
logging.debug("This is a DEBUG message.") # 파일에 기록됨위 코드에서 maxBytes는 로그 파일의 최대 크기(바이트 단위)이고,
backupCount는 백업할 파일의 개수를 설정하는 코드이다.
로그가 maxBytes 크기에 도달하면 새로운 파일로 자동 회전된다.
4. 로그 + 예외처리
import logging
# 파일에 로그 저장, 로그 레벨 설정
logging.basicConfig(filename='app.log', level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s')
def divide(a, b):
try:
return a / b
except ZeroDivisionError as e:
logging.error(f"ZeroDivisionError occurred: {e}")
raise # 예외를 다시 발생시켜 상위로 전달
try:
result = divide(10, 0)
except Exception as e:
logging.critical(f"Critical error: {e}") # 치명적인 에러를 로그에 기록divide() 함수에서 0으로 나누기를 시도하면 ZeroDivisionError가 발생하고, 이를 ERROR 레벨로 로그에 남긴다.
그 후, 상위 코드에서 Critical error로 기록된다.
| 로그 레벨 | DEBUG, INFO, WARNING, ERROR, CRITICAL 5단계로 필터링 가능 |
| 파일에 로그 저장 | filename을 사용하면 파일에 로그 기록할 수 있다. |
| 로그 회전 | RotatingFileHandler로 파일 크기에 맞춰 자동 회전한다. |
| 예외 처리 | try-except와 결합하여 에러를 로그로 기록할 수 있다. |
'Python' 카테고리의 다른 글
| [Python] __str__, __repr__ 자동 생성하는 파이썬 @dataclass와 로깅 활용법 (3) | 2025.05.03 |
|---|---|
| [Python] 객체지향, 결과지향, 리스트, 딕셔너리, 클래스, 매직메서드 (2) | 2025.05.03 |
| [Python] VSCode에서 venv로 파이썬 가상환경설정 하는 법 for Window (27) | 2025.05.02 |
| [Python] 파이썬으로 엑셀 데이터 나누기 split(), dict, pandas (3) | 2025.01.11 |
| [Python] VSCode에서 파이썬 사용하는 법 (12) | 2024.12.28 |