>백엔드 개발 >파이썬 튜토리얼 >FastAPI에서 요청 로깅 및 모니터링을 구현하는 방법

FastAPI에서 요청 로깅 및 모니터링을 구현하는 방법

WBOY
WBOY원래의
2023-07-30 08:29:394088검색

FastAPI에서 요청 로깅 및 모니터링을 구현하는 방법

소개:
FastAPI는 Python 3.7+ 기반의 고성능 웹 프레임워크로 자동화된 요청 및 응답 모델 확인, 보안, 성능 최적화, 등. 실제 개발에서는 디버깅 및 모니터링 분석을 위해 애플리케이션에 요청 로그를 기록해야 하는 경우가 많습니다. 이 문서에서는 FastAPI에서 요청 로깅 및 모니터링을 구현하는 방법을 소개하고 해당 코드 예제를 제공합니다.

1. 종속성 패키지 설치
시작하기 전에 필요한 종속성 패키지를 설치해야 합니다. 터미널을 열고 다음 명령을 실행하세요:

pip install fastapi uvicorn loguru

그 중 loguru는 사용하기 쉬운 로깅 라이브러리로, 요청 로그를 기록하는 데 사용하겠습니다.

2. FastAPI 애플리케이션 만들기
먼저 FastAPI 애플리케이션을 만들어야 합니다. 프로젝트 디렉터리에 main.py라는 파일을 생성하고 다음 코드를 작성합니다:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

3. 요청 로그 기록
다음으로, loguru 라이브러리를 사용하여 요청 로그를 기록하겠습니다. main.py 파일에 다음 코드를 추가합니다.

from loguru import logger
import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.on_event("startup")
async def startup_event():
    logger.add("logs/request.log", rotation="10 MB")

@app.get("/")
async def root():
    logger.info("Hello World")
    return {"message": "Hello World"}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

위 코드에서는 먼저 loguru 라이브러리의 로거 개체를 가져오고 파일 로거를 추가합니다. 로그 파일의 경로를 log/request.log로 지정하고, 로그 파일의 최대 크기를 10MB로 설정했습니다. 그런 다음 root() 함수에서 logger.info() 메서드를 사용하여 요청을 기록합니다.

4. 애플리케이션 시작
main.py 파일을 저장하고 터미널로 돌아가서 다음 명령을 실행하여 FastAPI 애플리케이션을 시작합니다.

uvicorn main:app --reload

터미널은 http://와 같은 애플리케이션의 액세스 URL을 출력합니다. 127.0.0.1:8000. 브라우저에서 이 URL에 액세스하면 "Hello World" 메시지가 표시됩니다. log/request.log 파일을 열면 요청 로그 기록이 표시됩니다.

5. 요청 모니터링
요청 로그를 기록하는 것 외에도 요청 처리 시간과 상태 코드도 모니터링할 수 있습니다. 이 기능을 구현하기 위해서는 FastAPI에서 제공하는 Middleware를 사용해야 합니다. main.py 파일에 다음 코드를 추가합니다:

from loguru import logger
import time
import uvicorn
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

@app.on_event("startup")
async def startup_event():
    logger.add("logs/request.log", rotation="10 MB")

@app.on_event("shutdown")
async def shutdown_event():
    logger.remove(handler_id="request_logger")

@app.middleware("http")
async def log_request(request: Request, call_next):
    start_time = time.time()
    response = await call_next(request)
    process_time = time.time() - start_time

    logger.info(
        "Request: {method} {url} {status_code} {process_time:.2f}ms",
        method=request.method,
        url=request.url,
        status_code=response.status_code,
        process_time=process_time * 1000,
    )

    return response

@app.get("/")
async def root():
    logger.info("Hello World")
    return {"message": "Hello World"}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

위 코드에서는 먼저 시간 모듈을 가져오고 root() 함수에 절전 시간을 추가하여 요청 처리 시간을 시뮬레이션합니다. 그런 다음 요청 처리 시간을 계산하고 log_request() 미들웨어 함수에 요청 상태 코드를 기록하는 로직을 추가했습니다. shutdown_event() 함수에서는 이전에 추가한 로거를 삭제합니다.

이제 FastAPI 애플리케이션을 다시 시작하고 브라우저에서 애플리케이션의 URL을 방문하세요. 브라우저에서 페이지를 새로 고치고 log/request.log 파일을 열면 요청 방법, URL, 상태 코드 및 처리 시간을 포함한 요청 로그 기록이 표시됩니다.

결론:
이 문서에서는 FastAPI에서 요청 로깅 및 모니터링을 구현하는 방법을 설명합니다. loguru 라이브러리를 사용하여 요청 로그를 기록하고 FastAPI의 미들웨어를 사용하여 요청 처리 시간 및 상태 코드를 모니터링합니다. 이러한 기능을 통해 당사는 애플리케이션 요청 및 응답을 더 잘 추적하고 모니터링할 수 있습니다. 위는 요청 로깅 및 모니터링을 구현하기 위한 코드 예제입니다.

참고 자료:

  • FastAPI 공식 문서: https://fastapi.tiangolo.com/
  • loguru 공식 문서: https://loguru.readthedocs.io/

위 내용은 FastAPI에서 요청 로깅 및 모니터링을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.