로깅과 디버깅은 문제를 빠르게 찾고 운영 환경을 모니터링하는 핵심 도구입니다. 이 치트시트는 logging 설정, 예외 로깅, traceback 읽는 법, breakpoint 활용을 정리합니다.
언제 이 치트시트를 보나?
- 예외가 났는데 “어디서 왜 났는지” 빠르게 파악해야 할 때
- print 디버깅을 로깅으로 정리하고 싶을 때
핵심 패턴
- 로거는
logging.getLogger(__name__)로 모듈 단위 생성 - 예외는
logger.exception(...)으로 스택트레이스를 함께 남기기(예외 처리 블록에서) - 포맷팅은 f-string보다 로깅 포맷(지연 평가)도 고려:
logger.info("x=%s", x)
최소 예제
1
2
3
4
5
6
| import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info("service started")
|
1
2
3
4
5
6
7
8
| import logging
logger = logging.getLogger(__name__)
try:
1 / 0
except ZeroDivisionError:
logger.exception("division failed") # traceback 포함
|
1
2
3
4
| # breakpoint (Py3.7+)
def f(x):
breakpoint()
return x + 1
|
자주 하는 실수/주의점
- 운영 환경에서
print()만으로는 추적이 어렵고, 레벨/구조화가 안 됨 → logging 사용 logger.exception은 except 블록 안에서 사용해야 의미 있는 traceback이 남음- 민감 정보(토큰/비밀번호)를 로그에 남기지 말기
관련 링크(공식 문서)