aboutsummaryrefslogtreecommitdiff
path: root/kennel/middleware.py
diff options
context:
space:
mode:
Diffstat (limited to 'kennel/middleware.py')
-rw-r--r--kennel/middleware.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/kennel/middleware.py b/kennel/middleware.py
new file mode 100644
index 0000000..dddf63b
--- /dev/null
+++ b/kennel/middleware.py
@@ -0,0 +1,30 @@
+import uuid
+import structlog
+from fastapi import Request, Response
+from .app import app, logger
+
+@app.middleware("http")
+async def logger_middleware(request: Request, call_next):
+ structlog.contextvars.clear_contextvars()
+ structlog.contextvars.bind_contextvars(
+ path=request.url.path,
+ method=request.method,
+ client_host=request.client.host,
+ request_id=str(uuid.uuid4()),
+ )
+ response = await call_next(request)
+
+ structlog.contextvars.bind_contextvars(
+ status_code=response.status_code,
+ )
+
+ # Exclude /healthcheck endpoint from producing logs
+ if request.url.path != "/healthcheck":
+ if 400 <= response.status_code < 500:
+ logger.warn("Client error")
+ elif response.status_code >= 500:
+ logger.error("Server error")
+ else:
+ logger.info("OK")
+
+ return response