[Python] Library | 10. logging

2026. 3. 26. 17:25·Language/Python
728x90

logging은 로그 기록을 생성 및 관리하는 라이브러리입니다. 별도의 설치 없이 사용할 수 있습니다.

 

코드의 진행상황을 출력하는 로그는 print()를 사용해도 구현할 수 있긴 합니다.

 

하지만 logging을 사용하면 출력 터미널에 기록이 나타나는 것에서 멈추지 않고 파일로 남기거나, DB에 남기는 것도 가능해집니다.

getLogger( )

logging은 기본적으로 Logger 객체를 생성하는 것에서 시작합니다. Logger 객체는 getLogger()함수로 생성할 수 있습니다.

import logging

logger = logging.getLogger(__name__)

Logger를 통해 띄울 수 있는 로그의 종류는 아래와 같습니다

if __name__ == "__main__":
    logger.debug("This is a debug message")  # 디버그
    logger.info("This is a info message")  # 정보
    logger.warning("This is a warning message")  # 경고
    logger.error("This is a error message")  # 에러
    logger.critical("This is a critical message")  # 치명적 에러

basicConfig( )

하지만 이를 실행하면 경고와 에러, 그리고 치명적 에러 로그만 출력됩니다.

This is a warning message
This is a error message
This is a critical message

이는 로그가 출력되는 최소 기준선이 기본적으로 경고(warning) 레벨까지 설정되어 있기 때문입니다. Logger는 이 기준선 이상의 로그만 터미널에 출력하게 됩니다.

 

Logger의 basicConfig( )함수는 이 기준선을 포함하여 출력 형식, 일자 등 세부사항들을 설정할 수 있습니다.

매개변수 타입 기능
level logging.DEBUG | ... | logging.CRITICAL 로그 출력 기준선 설정
format string 전체 출력 형식 설정
datefmt string 날짜 출력 형식 설정
filename string 로그를 저장할 파일 이름
설정할 시 터미널에 출력되지 않는 대신 파일로 저장됨
filemode 'a' | 'w' a : 이어서 쓰기
w : 새로 쓰기
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s [%(levelname)s] %(name)s:%(lineno)d - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
    filename='test.log',
    filemode='a'
)
logger = logging.getLogger(__name__)

asctime  |  로그가 생성된 시간

levelname  |  로그 레벨(debug, info 등)

name  |  Logger 객체의 이름

lineno  |  로그가 발생한 소스코드의 줄 번호

message  |  실제 로그 내용

 

이제 새로운 Logger는 이렇게 로그를 생성합니다.

2026-03-26 17:22:38 [DEBUG] __main__:11 - This is a debug message
2026-03-26 17:22:38 [INFO] __main__:12 - This is a info message
2026-03-26 17:22:38 [WARNING] __main__:13 - This is a warning message
2026-03-26 17:22:38 [ERROR] __main__:14 - This is a error message
2026-03-26 17:22:38 [CRITICAL] __main__:15 - This is a critical message

핸들러

핸들러는 로그를 어느 위치에 어떤 방식으로 남길지 결정하는 객체입니다. basicConfig()는 기본적으로 rootLoggerHandler를 사용하는데, 이를 바꾸면 파일을 저장하면서도 터미널에서 로그를 출력할 수 있습니다.

핸들러 로그 출력 위치
StreamHandler 터미널에 출력
FileHandler 파일에 출력
RotatingFileHanlder 파일에 출력, 파일이 커지면 새 파일을 자동으로 생성
TimedRotatingFileHandler 파일에 출력, 경과 시간을 넘기면 새 파일을 자동으로 생성
import logging
import sys
from logging.handlers import TimedRotatingFileHandler

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

log_format = logging.Formatter(
    '%(asctime)s [%(levelname)s] %(name)s:%(lineno)d - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'
)

# 터미널 출력용 핸들러 설정
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(log_format)  # 출력 형태 설정
console_handler.setLevel(logging.DEBUG)  # 출력 기준 설정
logger.addHandler(console_handler)  # Logger에 핸들러 추가

# 파일 출력용 핸들러 설정
file_handler = TimedRotatingFileHandler(
    filename='test.log',
    when='midnight',     # 매일 자정에 로그 파일 교체
    interval=1,          # 1일 간격으로 교체
    backupCount=30,      # 최대 30개의 백업 파일 유지
    encoding='utf-8'     # 인코딩 설정
)
file_handler.setFormatter(log_format)  # 출력 형태 설정
file_handler.setLevel(logging.INFO)  # 출력 기준 설정
logger.addHandler(file_handler)  # Logger에 핸들러 추가
728x90

'Language > Python' 카테고리의 다른 글

[Python] Uv에 대하여  (1) 2026.04.09
[Python] Library | 11. typing  (0) 2026.04.08
[Python] Library | 09. dotenv  (0) 2026.03.26
[Python] Syntax | 04. import  (0) 2026.02.17
[Python] Syntax | 03. Decorator(@)  (0) 2026.02.16
'Language/Python' 카테고리의 다른 글
  • [Python] Uv에 대하여
  • [Python] Library | 11. typing
  • [Python] Library | 09. dotenv
  • [Python] Syntax | 04. import
Rayi
Rayi
  • Rayi
    아카이브
    Rayi
  • 전체
    오늘
    어제
    • 분류 전체보기 (297)
      • CS (40)
        • CV (2)
        • PS (37)
      • Reveiw (19)
        • Paper (19)
        • Github (0)
      • ML (13)
        • Pytorch (5)
      • Language (72)
        • Python (21)
        • JavaScript (32)
        • TypeScript (16)
        • C++ (3)
      • IDE (12)
      • Git (13)
      • Frontend (77)
        • React (8)
        • ReactNative (6)
        • SolidJS (20)
        • CSS (12)
      • Backend (47)
        • DB (18)
        • Node.js (11)
        • Python (3)
      • UI (3)
      • Automation (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    mongo
    Three
    SOLID
    backend
    vscode
    GAN
    API
    ML
    CSS
    review
    nodejs
    react
    ReactNative
    DB
    PRISMA
    FastAPI
    Express
    figma
    CV
    frontend
    js
    postgresql
    python
    deploy
    PyTorch
    CS
    Git
    ps
    ts
    modal
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.5
Rayi
[Python] Library | 10. logging
상단으로

티스토리툴바