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

1. 개요

Flask-RESTful은 Python에서 RESTful API를 구축하기 위한 간단하고 강력한 프레임워크입니다. API를 개발할 때, 클라이언트의 요청과 서버의 응답에 대한 로깅은 매우 유용한 디버깅 도구입니다. 이 기사에서는 Flask-RESTful에서 API 요청에 대한 로깅 방법을 알아봅니다.

2. Flask-RESTful에서 로깅 설정하기

Flask-RESTful에서 API 요청에 대한 로깅을 적용하기 위해서는 Flask의 logging 모듈을 사용해야 합니다. Flask는 기본적으로 Werkzeug라는 웹 서버용 로깅 모듈을 제공하지만, Flask-RESTful에서는 이를 조금 수정하여 API 요청에 대한 로깅을 추가할 수 있습니다.

먼저, Flask 애플리케이션을 초기화하는 코드에서 다음과 같이 logging 모듈을 import 합니다.

from flask import Flask
import logging

그런 다음, 로거 인스턴스를 만들고 레벨을 설정합니다.

app = Flask(__name__)
log = logging.getLogger('werkzeug')
log.setLevel(logging.DEBUG)

이제 로깅이 설정되었으므로, API 요청에 대한 로그를 출력하도록 Flask-RESTful에 알릴 필요가 있습니다. 이를 위해 @app.before_request 데코레이터를 사용하여 전처리 함수를 정의합니다.

@app.before_request
def before_request_func():
    log.debug('API 요청 받음 - {}'.format(request.url))

위의 코드에서는 앞서 초기화한 로거의 debug 메서드를 사용하여 API 요청이 수신되면 그 URL을 로그로 출력하도록 설정하였습니다.

추가로, API 응답에 대한 로깅도 포함하고 싶다면 @app.after_request 데코레이터를 사용하여 후처리 함수를 정의할 수 있습니다.

@app.after_request
def after_request_func(response):
    log.debug('API 응답 - {}'.format(response.status))
    return response

위의 코드에서는 응답 객체의 status 속성을 사용하여 응답 상태를 로그로 출력하도록 설정하였습니다.

3. 로깅 구성 변경하기

Flask-RESTful의 로깅 기본 설정은 Werkzeug의 기본 로깅 구성을 따르지만, 필요에 따라 로그 형식, 로그 레벨 등을 수정할 수 있습니다. Werkzeug의 logging 모듈을 사용하여 로깅 구성을 변경할 수 있습니다.

예를 들어, 로그 형식을 수정하려면 다음과 같이 로그 핸들러의 형식을 변경할 수 있습니다.

from flask import Flask
import logging

app = Flask(__name__)
log = logging.getLogger('werkzeug')

# 로그 형식 변경
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
for handler in log.handlers:
    handler.setFormatter(formatter)

위의 코드에서는 logging.Formatter를 사용하여 로그 핸들러의 형식을 수정하였습니다.

4. 결론

이 기사에서는 Flask-RESTful에서 API 요청에 대한 로깅하는 방법을 알아보았습니다. Flask-RESTful은 간단하지만 무척 강력한 프레임워크이며, 로깅을 통해 디버깅을 더욱 수월하게 할 수 있습니다. Flask-RESTful의 로깅 설정을 변경하여 필요에 맞게 로깅을 조정할 수도 있습니다. 사용자의 요구에 따라 로깅 설정을 자유롭게 수정하여 효과적인 디버깅을 할 수 있습니다.

참고 자료