[python] Flask-RESTful에서 특정 요청에 대한 로깅 방법

Flask-RESTful은 Flask 프레임워크를 확장하여 RESTful API 개발을 편리하게 할 수 있는 도구입니다. API를 구축하면서 로깅은 매우 중요한 요소입니다. 로깅을 통해 어플리케이션의 동작을 모니터링하고 디버깅하는데 도움을 줄 수 있습니다. 이번 글에서는 Flask-RESTful에서 특정 요청에 대한 로깅을 어떻게 구현하는지 알아보겠습니다.

로깅 라이브러리 설치

먼저, Flask-RESTful에서 로깅을 사용하기 위해 logging 라이브러리를 설치해야 합니다.

pip install logging

로거 설정

Flask-RESTful에서 로깅을 사용하려면 로거(logger)를 설정해야 합니다. 로거는 로그 메시지를 생성하고 적절한 출력 위치에 전달하는 역할을 합니다.

import logging

# 로거 생성
logger = logging.getLogger()

# 로그 레벨 설정
logger.setLevel(logging.DEBUG)

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

# 로그 포맷 설정
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)

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

위 코드에서는 기본 로거를 생성하고 로깅 레벨을 DEBUG로 설정했습니다. 로그 메시지를 콘솔에 출력하기 위해 콘솔 핸들러를 생성하고 로그 포맷을 설정했습니다. 마지막으로, 로거에 콘솔 핸들러를 추가해주면 설정이 완료됩니다.

로깅 사용

이제 로거가 설정되었으므로 특정 요청에 대한 로깅을 구현할 수 있습니다. Flask-RESTful에서는 before_request 데코레이터를 사용하여 요청이 처리되기 전에 특정 함수를 실행할 수 있습니다. 이를 이용하여 로깅을 추가할 수 있습니다.

from flask import request
from flask_restful import Resource

class MyResource(Resource):
    @app.before_request
    def log_request_info():
        logger.debug('Requested URL: %s', request.url)
        logger.debug('Request method: %s', request.method)
        logger.debug('Request headers: %s', request.headers)

위 예제에서는 MyResource 클래스에서 before_request 데코레이터를 사용하여 log_request_info 함수를 실행하도록 했습니다. 이 함수에서는 로거를 사용하여 요청에 대한 정보를 로그로 출력하게 됩니다.

실행 결과

위의 코드를 실행하고 API 요청을 보내면 콘솔에 로그 메시지가 출력될 것입니다. 예를 들어, 다음과 같은 요청을 보낸다면:

GET /api/users

콘솔 출력은 다음과 같을 것입니다:

2022-01-01 09:00:00 - DEBUG - Requested URL: /api/users
2022-01-01 09:00:00 - DEBUG - Request method: GET
2022-01-01 09:00:00 - DEBUG - Request headers: {'User-Agent': 'Mozilla/5.0', 'Accept-Language': 'en-US,en;q=0.5'}

참고 자료

위의 예제를 참고하여 Flask-RESTful에서 특정 요청에 대한 로깅을 구현해보세요!