본문 바로가기

Study Information Technology

Python의 로깅 모듈 구현 애플리케이션 추적 및 디버깅

728x90
반응형

Python의 로깅 모듈 구현: 애플리케이션 추적 및 디버깅

Overview

Python의 logging 모듈은 애플리케이션의 동작을 추적하고 문제를 디버깅하는 데 유용한 도구입니다. 이 모듈을 사용하면 애플리케이션의 실행 상태를 기록하고, 코드에서 발생하는 문제를 파악하며, 문제 해결을 보다 수월하게 할 수 있습니다. logging 모듈은 다양한 로그 레벨과 포맷 옵션을 제공하며, 복잡한 로그 구성을 지원합니다. 이 답변에서는 logging 모듈의 기본 사용법과 고급 기능을 자세히 설명하겠습니다.


기본 사용법

1. 로그 메시지 기록하기

가장 기본적인 로깅 구현은 다음과 같은 코드로 시작할 수 있습니다:

import logging

# 로그의 기본 설정
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

# 로그 메시지 기록
logging.debug('디버그 메시지')
logging.info('정보 메시지')
logging.warning('경고 메시지')
logging.error('오류 메시지')
logging.critical('치명적 메시지')
  • logging.basicConfig() 함수는 로그의 기본 설정을 정의합니다.
  • level 매개변수는 로깅의 최소 레벨을 설정하며, 여기서는 DEBUG로 설정하여 모든 레벨의 로그 메시지가 출력됩니다.
  • format 매개변수는 로그 메시지의 출력 형식을 지정합니다. %(asctime)s는 로그 발생 시각을, %(levelname)s는 로그의 레벨을, %(message)s는 로그 메시지를 출력합니다.

이 코드를 실행하면, 다음과 같은 로그 메시지가 출력됩니다:

2024-08-17 10:00:00,000 - DEBUG - 디버그 메시지
2024-08-17 10:00:00,000 - INFO - 정보 메시지
2024-08-17 10:00:00,000 - WARNING - 경고 메시지
2024-08-17 10:00:00,000 - ERROR - 오류 메시지
2024-08-17 10:00:00,000 - CRITICAL - 치명적 메시지

2. 로그 파일로 기록하기

로그를 파일에 기록하려면, logging.basicConfig()filename 매개변수를 사용하여 파일을 지정할 수 있습니다:

import logging

# 파일로 로그 기록 설정
logging.basicConfig(filename='app.log', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

# 로그 메시지 기록
logging.info('이 메시지는 파일에 기록됩니다.')

위 코드에서는 app.log라는 파일에 로그 메시지를 기록합니다. 파일을 열어보면 로그 메시지가 저장되어 있는 것을 확인할 수 있습니다.


고급 사용법

1. 로그 핸들러와 포맷터

고급 로깅에서는 HandlerFormatter를 사용하여 로그 메시지를 다양한 방식으로 처리할 수 있습니다. 예를 들어, 콘솔과 파일 모두에 로그를 기록하려면 다음과 같이 할 수 있습니다:

import logging

# 로거 객체 생성
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)

# 콘솔 핸들러 설정
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)

# 파일 핸들러 설정
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.DEBUG)

# 포맷터 설정
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 핸들러에 포맷터 추가
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

# 로거에 핸들러 추가
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# 로그 메시지 기록
logger.debug('디버그 메시지')
logger.info('정보 메시지')

이 코드에서는 두 개의 핸들러를 설정합니다: 콘솔 핸들러와 파일 핸들러. formatter를 사용하여 로그 메시지의 형식을 지정합니다.

2. 로깅 레벨

logging 모듈은 다음과 같은 로그 레벨을 지원합니다:

  • DEBUG: 디버깅 정보를 제공하는 상세 로그.
  • INFO: 일반적인 정보를 제공하는 로그.
  • WARNING: 경고를 나타내는 로그.
  • ERROR: 오류를 나타내는 로그.
  • CRITICAL: 치명적인 문제를 나타내는 로그.

로그 레벨은 로그의 중요도를 나타내며, 로거와 핸들러에 설정하여 필터링할 수 있습니다.

3. 예외 정보 기록하기

로그에 예외 정보를 기록하려면 exception() 메서드를 사용할 수 있습니다:

import logging

# 로거 설정
logging.basicConfig(level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')

try:
1 / 0
except ZeroDivisionError:
logging.exception('예외가 발생했습니다.')

이 코드에서는 ZeroDivisionError 예외가 발생할 때, 예외 정보를 로그에 기록합니다. 로그 파일이나 콘솔에 스택 트레이스가 포함된 예외 메시지가 출력됩니다.


오류와 해결책

오류 코드: FileNotFoundError

로그 파일을 생성하려 할 때 파일 경로가 잘못된 경우 FileNotFoundError가 발생할 수 있습니다. 이 오류는 지정된 경로가 존재하지 않거나 접근할 수 없을 때 발생합니다.

해결 방법:

  • 파일 경로가 올바른지 확인합니다.
  • 경로에 쓰기 권한이 있는지 확인합니다.

오류 코드: PermissionError

파일에 기록할 권한이 없는 경우 PermissionError가 발생할 수 있습니다. 이는 파일을 열거나 생성하는 데 필요한 권한이 부족할 때 발생합니다.

해결 방법:

  • 파일에 대한 쓰기 권한이 있는지 확인합니다.
  • 권한이 부족한 경우 관리자 권한으로 실행합니다.

참고문서

728x90
반응형