logging.basicConfig() 사용하기

Tasker_Jang·6일 전

1. 기본 개념

logging.basicConfig()는 Python logging 모듈의 전역 로거를 한 번에 설정하는 함수입니다. 어디서 logger = logging.getLogger("pipeline")로 로거를 가져와도 이 설정이 공통 적용됩니다.


2. 파라미터별 설명

level=logging.INFO

# 로그 레벨 계층
DEBUG    # 10 — 상세 디버그 정보
INFO     # 20 — 일반 진행 상황 ← 이 수준 이상만 출력
WARNING  # 30 — 경고 (동작은 하지만 주의 필요)
ERROR    # 40 — 에러 (일부 기능 실패)
CRITICAL # 50 — 치명적 오류

# INFO로 설정하면 INFO / WARNING / ERROR / CRITICAL 모두 출력
# DEBUG는 출력 안 됨
logging.basicConfig(level=logging.INFO)
logger.debug("안 보임")    # 무시
logger.info("보임")        # 출력
logger.warning("보임")     # 출력
logger.error("보임")       # 출력

format="%(asctime)s [%(levelname)s] %(name)s: %(message)s"

각 자리표시자의 의미:

# %(asctime)s   — 로그 발생 시각
# %(levelname)s — 로그 레벨 이름
# %(name)s      — 로거 이름 (getLogger("pipeline")의 "pipeline")
# %(message)s   — 실제 로그 메시지

# 출력 예시
# 2026-04-02 14:23:11,042 [INFO] pipeline: 파싱 완료 — 13,980자
# 2026-04-02 14:23:11,503 [ERROR] pipeline: 요약 실패: RateLimitError

handlers=[...]

로그를 어디에 출력할지 지정. 여러 개 동시에 설정 가능.

handlers=[
    logging.StreamHandler(),                              # 터미널(stdout)에 출력
    logging.FileHandler("pipeline.log", encoding="utf-8"), # 파일에 저장
]

# StreamHandler  — 실행 중 터미널에서 실시간으로 확인
# FileHandler    — pipeline.log 파일에 누적 저장
#                  encoding="utf-8" 없으면 한글 깨짐

3. 실제 사용 패턴

# 설정 (main.py 최상단에서 1회만)
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
    handlers=[
        logging.StreamHandler(),
        logging.FileHandler("pipeline.log", encoding="utf-8"),
    ],
)

# 각 모듈에서 로거 가져오기
logger = logging.getLogger("pipeline")   # main.py
logger = logging.getLogger("chunker")    # chunker.py
logger = logging.getLogger("summarizer") # llm.py

# 사용
logger.info("청킹 완료 — 총 %d개", len(chunks))
logger.warning("메타데이터 추출 실패: %s", e)
logger.error("파싱 실패: %s", e, exc_info=True)  # exc_info=True → 스택 트레이스 포함

4. pipeline.log 출력 예시

2026-04-02 14:23:10,991 [INFO] pipeline: 파이프라인 시작: 한화투자증권 두산밥캣.pdf
2026-04-02 14:23:11,042 [INFO] pipeline: 메타데이터 추출 완료 — lang=ko pages=5
2026-04-02 14:23:11,318 [INFO] pipeline: 파싱 완료 — 13980자  image_based=False
2026-04-02 14:23:11,421 [INFO] pipeline: 전처리 완료 — 13025자 (6.8%↓)
2026-04-02 14:23:11,503 [INFO] pipeline: 청킹 완료 — 총 10개
2026-04-02 14:23:14,210 [INFO] pipeline: 요약 완료 — 전체요약 312자  섹션 10개
2026-04-02 14:23:14,211 [INFO] pipeline: 파이프라인 완료 — 3.2s

5. print vs logging 비교

항목printlogging
레벨 구분없음DEBUG / INFO / WARNING / ERROR
파일 저장별도 구현 필요FileHandler로 자동
타임스탬프직접 포함해야 함%(asctime)s로 자동
운영 환경끄기 어려움level 조정으로 제어
스택 트레이스직접 출력exc_info=True 한 줄

한 줄 요약: logging.basicConfig()는 레벨·포맷·출력 대상을 한 번에 설정하며, FileHandlerStreamHandler를 함께 쓰면 터미널 실시간 확인과 파일 누적 저장을 동시에 처리할 수 있습니다.

profile
ML Engineer 🧠 | AI 모델 개발과 최적화 경험을 기록하며 성장하는 개발자 🚀 The light that burns twice as bright burns half as long ✨

0개의 댓글