Flask 웹 서버 만들기

Flask로 웹개발: #15 시스템 로그

TitediosKW 2024. 8. 5. 19:00
반응형



갑자기 로그가 나왔습니다. API 기능을 개발할 줄 알았는데요. 사실 로그를 다루는 이유가 있습니다. API는 눈에 보이지 않기 때문에 에로를 확인하거나 동작을 확인하기 어렵습니다. 따라서, 시스템 로그를 통해 애플리케이션의 동작을 기록하고, 디버깅 및 성능 최적화를 할 수 있습니다. Python의 logging 모듈을 사용하면 손쉽게 로그를 작성하고 관리할 수 있습니다. 이번 포스팅에서는 Python logging 모듈을 이용하여 시스템 로그를 작성하는 방법을 단계별로 설명하겠습니다.

1. logging 모듈 소개

Python의 logging 모듈은 다양한 로깅 기능을 제공합니다. 이를 통해 로그 메시지를 파일에 기록하거나 콘솔에 출력할 수 있으며, 로그 레벨을 설정하여 원하는 중요도를 선택하여 해당 로그만 기록할 수 있습니다.

2. 기본 설정

먼저, logging 모듈을 사용하기 위한 기본 설정을 살펴보겠습니다. 가장 간단한 설정으로 콘솔에 로그를 출력하는 방법입니다.

import logging

# 기본 설정
logging.basicConfig(level=logging.DEBUG) # DEBUG 레벨 출력 설정

# 로그 메시지 작성
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message') 
logging.error('This is an error message')
logging.critical('This is a critical message')


이 예제에서는 로그 레벨을 DEBUG로 설정하여 모든 로그 메시지를 콘솔에 출력합니다.

3. 로그 파일에 기록하기

로그를 콘솔이 아닌 파일에 기록하려면 basicConfig 함수의 filename 매개변수를 사용합니다.

코드 복사
import logging

# 파일에 로그 기록 설정
logging.basicConfig(filename='app.log', level=logging.DEBUG)

# 로그 메시지 작성
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')


이제 로그 메시지가 app.log 파일에 기록됩니다.

4. 로그 포맷 지정하기

로그 메시지의 포맷을 지정하여 더 많은 정보를 포함할 수 있습니다. 예를 들어, 로그 메시지에 시간, 로그 레벨, 메시지를 포함할 수 있습니다.

코드 복사
import logging

# 로그 포맷 지정
logging.basicConfig(
    filename='app.log',
    level=logging.DEBUG,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'  # 포맷 지정
)

# 로그 메시지 작성
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')


이제 로그 메시지에는 시간, 로거 이름, 로그 레벨, 실제 메시지가 포함됩니다.

5. 로거, 핸들러, 포매터 사용하기

logging 모듈의 강력한 기능 중 하나는 로거, 핸들러, 포매터를 조합하여 다양한 방식으로 로그를 기록할 수 있다는 점입니다.

  • 로거(Logger): 로그 메시지를 생성하는 데 사용됩니다.
  • 핸들러(Handler): 로그 메시지를 출력하는 데 사용됩니다.
  • 포매터(Formatter): 로그 메시지의 포맷을 지정하는 데 사용됩니다.

/br>로거를 생성하고 핸들러를 등록합니다. 핸들러에는 포맷이나 파일로그/콘솔로그 등을 설정합니다.

코드 복사
import logging

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

# 콘솔 핸들러 생성
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 파일 핸들러 생성
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.ERROR)

# 포매터 생성
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('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')


이 예제에서는 my_logger라는 로거를 생성하고, 콘솔 핸들러와 파일 핸들러를 추가했습니다. 콘솔 핸들러는 모든 로그 메시지를 출력하고, 파일 핸들러는 ERROR 이상의 로그 메시지만 app.log 파일에 기록합니다.

6. 결론

이번 포스팅에서는 Python의 logging 모듈을 사용하여 시스템 로그를 작성하는 방법을 살펴보았습니다. 기본 설정에서 시작하여, 파일에 로그를 기록하고, 로그 포맷을 지정하는 방법, 그리고 로거, 핸들러, 포매터를 활용하는 방법까지 다뤘습니다. 이러한 로깅 기능을 사용하면 애플리케이션의 동작을 효과적으로 모니터링하고 디버깅할 수 있습니다.

로그 설정을 통해 애플리케이션의 안정성을 높이고, 발생할 수 있는 문제를 사전에 파악하여 해결할 수 있습니다. 문제를 파악하기 위해 로그가 굉장히 중요한 역할을 합니다. 이 로그 분석을 통해 시스템의 상태를 알 수 있을뿐만 아니라 문제가 발생한 원인도 파악할 수 있습니다.

도움이 되셨다면 공감 부탁드리겠습니다. 여러분의 공감이 정말 큰 힘이 됩니다.

감사합니다!

반응형