왜 print 대신 logging
print 는 프로토타입용. logging 은 살아있는 코드용. logging 이 레벨 (DEBUG/INFO/WARNING/ERROR/CRITICAL), 핸들러 (어디 쓸지), 포매터 (어떻게 보일지), 코드 안 만지고 켜기/끄기 능력 줘. 일주일 쓰면 print 로 돌아가는 게 원시적 느낌.
5 레벨
DEBUG — 개발용 verbose 추적. INFO — 정상 운영 마크 이벤트. WARNING — 비정상이지만 실패 X. ERROR — 프로그램 안 죽인 실패. CRITICAL — 죽기 직전. 로거에 레벨 설정하면 그 아래 다 필터 — INFO 설정이 DEBUG 떨어뜨림.
라이브러리에선 logger.info(), logging.info() X
표준 라이브러리 패턴 — 각 모듈 상단에 logger = logging.getLogger(__name__). logger.info(...) 사용, logging.info(...) 절대 X. named logger 가 애플리케이션이 모듈별 verbosity 설정 가능 — 한 모듈 noisy debug, 다른 거 조용히 원할 때 유용. __name__ 이 import path 자동.
basicConfig — 스크립트용
로그 stderr 또는 파일로 가야 할 스크립트엔 logging.basicConfig(level=INFO, format='...') 가 한 줄. 큰 애플리케이션엔 핸들러 + 포매터 명시적 설정 — 다음 코드 블록.
원칙: 라이브러리는
logger.info("...") 호출. 애플리케이션이 상단에서 한 번 설정 — 어떤 레벨, 어떤 포맷, 어디 쓸지. 라이브러리에서 basicConfig 호출 X — 애플리케이션이 결정하게.