[python] FastAPI에서 로그 모니터링 및 경고 설정하기

FastAPI는 Python 기반의 웹 프레임워크로, 빠른 성능과 사용하기 쉬운 API 개발을 제공합니다. 이를 통해 웹 애플리케이션 개발을 더욱 간편하게 할 수 있습니다. 하지만 sometimes you may encounter bugs or errors in your FastAPI application. 이러한 경우, logging과 경고 설정을 통해 이러한 오류를 모니터링하고 대응할 수 있습니다.

Logging 설정하기

FastAPI에서 기본적으로 logging 모듈을 사용하여 로그를 처리합니다. 로깅 설정은 로그 레벨과 로그 출력 방식을 포함합니다. 다음과 같이 logging 모듈을 사용하여 로그 레벨을 설정할 수 있습니다.

import logging

logging.basicConfig(level=logging.INFO)

이 예시에서는 로그 레벨을 INFO로 설정했습니다. 이는 출력할 로그의 세부 수준을 의미합니다. 다음은 로그 레벨의 일반적인 종류입니다.

원하는 로그 수준에 해당하는 로그 레벨을 설정할 수 있습니다. 또한 로그를 파일에 저장하거나 다른 출력 방식을 사용할 수도 있습니다.

경고 설정하기

FastAPI에서는 warnings 모듈을 사용하여 경고 메시지를 처리할 수 있습니다. 경고 메시지는 개발 중인 애플리케이션에서 잠재적인 문제를 나타내는 경우에 사용됩니다. 예를 들어, 비권장된 메서드 또는 모듈을 사용하는 경우 경고를 출력하고 대응할 수 있습니다.

경고 메시지를 출력하기 위해 warnings 모듈의 warn 함수를 사용합니다. 다음은 예시 코드입니다.

import warnings

warnings.warn("이 방법은 비권장입니다.", DeprecationWarning)

경고 메시지를 출력하고자 하는 경우에는 위와 같이 warn 함수를 호출하고, 첫 번째 인자로 출력할 메시지를, 두 번째 인자로는 경고의 종류를 지정합니다.

사용자 정의 로그 및 경고 설정하기

FastAPI에서는 기본 로그 및 경고 설정 이외에도 사용자 정의 설정을 적용할 수 있습니다. 이를 통해 로깅 포맷, 로그 파일 저장, 로그의 레벨에 따른 분류 등을 사용자가 원하는 대로 설정할 수 있습니다.

사용자 정의 로그 설정을 위해서는 logging 모듈의 Logger 객체를 생성하고, 필요한 설정을 수행해야 합니다. 예를 들어, 로그를 파일에 저장하고 싶다면 다음과 같이 설정할 수 있습니다.

import logging

logger = logging.getLogger(__name__)
handler = logging.FileHandler(filename='app.log')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

handler.setFormatter(formatter)
logger.addHandler(handler)

이 예시에서는 getLogger 함수를 사용하여 Logger 객체를 생성하고, FileHandler를 통해 로그를 파일에 저장했습니다. 로그의 포맷을 지정하기 위해 Formatter를 사용하였습니다.

사용자 정의 경고 설정을 위해서는 warnings 모듈의 filterwarnings 함수를 사용하여 경고 메시지의 출력을 제어할 수 있습니다. 예를 들어, 한 번만 출력되도록 경고 메시지를 설정하려면 다음과 같이 설정할 수 있습니다.

import warnings

warnings.filterwarnings("once")

위 코드는 이미 발생한 경고 메시지는 한 번만 출력하도록 설정합니다. 이렇게 하면 반복해서 같은 경고 메시지가 여러 번 출력되는 것을 방지할 수 있습니다.

결론

FastAPI에서 로그 모니터링 및 경고 설정을 통해 웹 애플리케이션의 오류와 잠재적인 문제를 파악하고 대응할 수 있습니다. 기본 설정 이외에도 사용자 정의 설정을 통해 로그의 포맷, 출력 방식, 경고 메시지의 제어 등을 유연하게 처리할 수 있습니다. 이를 통해 개발한 애플리케이션의 안정성과 신뢰성을 향상시킬 수 있습니다.

참고 자료