Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie die Anforderungsprotokollierung und -überwachung in FastAPI

So implementieren Sie die Anforderungsprotokollierung und -überwachung in FastAPI

WBOY
WBOYOriginal
2023-07-30 08:29:393831Durchsuche

So implementieren Sie die Anforderungsprotokollierung und -überwachung in FastAPI

Einführung:
FastAPI ist ein leistungsstarkes Web-Framework basierend auf Python 3.7+, das viele leistungsstarke Funktionen und Features bietet, einschließlich automatisierter Überprüfung des Anforderungs- und Antwortmodells, Sicherheit, Leistungsoptimierung, usw. In der tatsächlichen Entwicklung müssen wir häufig Anforderungsprotokolle in der Anwendung aufzeichnen, um Debugging- und Überwachungsanalysen durchzuführen. In diesem Artikel wird die Implementierung der Anforderungsprotokollierung und -überwachung in FastAPI vorgestellt und entsprechende Codebeispiele bereitgestellt.

1. Abhängigkeitspakete installieren
Bevor wir beginnen, müssen wir einige notwendige Abhängigkeitspakete installieren. Öffnen Sie das Terminal und führen Sie den folgenden Befehl aus:

pip install fastapi uvicorn loguru

Unter anderem ist loguru eine benutzerfreundliche Protokollierungsbibliothek, mit der wir Anforderungsprotokolle aufzeichnen.

2. Erstellen Sie eine FastAPI-Anwendung
Zuerst müssen wir eine FastAPI-Anwendung erstellen. Erstellen Sie im Projektverzeichnis eine Datei mit dem Namen main.py und schreiben Sie den folgenden Code:

from fastapi import FastAPI

app = FastAPI()

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

3. Anforderungsprotokolle aufzeichnen
Als Nächstes verwenden wir die Loguru-Bibliothek, um Anforderungsprotokolle aufzuzeichnen. Fügen Sie den folgenden Code zur Datei main.py hinzu:

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)

Im obigen Code importieren wir zunächst das Logger-Objekt der Loguru-Bibliothek und fügen einen Datei-Logger hinzu. Wir haben den Pfad der Protokolldatei als logs/request.log angegeben und die maximale Größe der Protokolldatei auf 10 MB festgelegt. Dann verwenden wir in der Funktion root() die Methode logger.info(), um die Anfrage zu protokollieren.

4. Starten Sie die Anwendung.
Speichern Sie die Datei main.py und kehren Sie zum Terminal zurück. Führen Sie den folgenden Befehl aus, um die FastAPI-Anwendung zu starten:

uvicorn main:app --reload

Das Terminal gibt die Zugriffs-URL der Anwendung aus, z. B. http:// 127.0.0.1:8000. Wenn wir im Browser auf diese URL zugreifen, wird die Meldung „Hello World“ angezeigt. Öffnen Sie die Datei logs/request.log und wir sehen die Anforderungsprotokolldatensätze.

5. Überwachung von Anfragen
Zusätzlich zur Aufzeichnung von Anfrageprotokollen können wir auch die Bearbeitungszeit und den Statuscode der Anfrage überwachen. Um diese Funktion zu implementieren, müssen wir die von FastAPI bereitgestellte Middleware verwenden. Fügen Sie den folgenden Code zur Datei main.py hinzu:

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)

Im obigen Code importieren wir zunächst das Zeitmodul und fügen eine Ruhezeit in der Funktion root() hinzu, um die Bearbeitungszeit der Anfrage zu simulieren. Anschließend haben wir die Logik zum Berechnen der Anforderungsverarbeitungszeit und zum Aufzeichnen des Anforderungsstatuscodes in der Middleware-Funktion log_request() hinzugefügt. In der Funktion „shutdown_event()“ löschen wir den zuvor hinzugefügten Logger.

Jetzt starten Sie die FastAPI-Anwendung neu und rufen Sie die URL der Anwendung in Ihrem Browser auf. Aktualisieren Sie die Seite im Browser und öffnen Sie die Datei logs/request.log. Wir sehen die Anforderungsprotokolldatensätze einschließlich der Anforderungsmethode, der URL, des Statuscodes und der Verarbeitungszeit.

Fazit:
In diesem Artikel wird erläutert, wie Sie die Anforderungsprotokollierung und -überwachung in FastAPI implementieren. Wir verwenden die Loguru-Bibliothek zum Aufzeichnen von Anforderungsprotokollen und verwenden die Middleware von FastAPI, um die Verarbeitungszeit und den Statuscode der Anforderung zu überwachen. Diese Funktionen ermöglichen es uns, Bewerbungsanfragen und -antworten besser zu verfolgen und zu überwachen. Das Obige ist ein Codebeispiel zur Implementierung der Anforderungsprotokollierung und -überwachung.

Referenzmaterialien:

  • Offizielle Dokumentation von FastAPI: https://fastapi.tiangolo.com/
  • Offizielle Dokumentation von Loguru: https://loguru.readthedocs.io/

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Anforderungsprotokollierung und -überwachung in FastAPI. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn