Setup Secure server logging & disable uvicorn access logs

This commit is contained in:
mhdzumair
2024-01-26 19:34:18 +05:30
parent 1c00a3e6cb
commit 5e44cfcb44
4 changed files with 30 additions and 2 deletions
+1 -1
View File
@@ -1 +1 @@
web: uvicorn --host 0.0.0.0 --port $PORT api.main:app web: uvicorn --no-access-log --host 0.0.0.0 --port $PORT api.main:app
+6
View File
@@ -18,6 +18,7 @@ from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import RedirectResponse, FileResponse, StreamingResponse from fastapi.responses import RedirectResponse, FileResponse, StreamingResponse
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates
from api.middleware import SecureLoggingMiddleware
from db import database, crud, schemas from db import database, crud, schemas
from db.config import settings from db.config import settings
from scrappers import tamil_blasters, tamilmv from scrappers import tamil_blasters, tamilmv
@@ -65,6 +66,11 @@ cache = Cache(
) )
@app.middleware("http")
async def add_custom_logging(request: Request, call_next):
return await SecureLoggingMiddleware()(request, call_next)
@app.on_event("startup") @app.on_event("startup")
async def init_server(): async def init_server():
await database.init() await database.init()
+22
View File
@@ -0,0 +1,22 @@
import logging
from fastapi.requests import Request
from fastapi.responses import Response
class SecureLoggingMiddleware:
async def __call__(self, request: Request, call_next):
response = await call_next(request)
self.custom_log(request, response)
return response
@staticmethod
def custom_log(request: Request, response: Response):
url_path = request.url.path
if request.path_params.get("secret_str"):
url_path = url_path.replace(
request.path_params.get("secret_str"), "***MASKED***"
)
logging.info(
f'{request.client.host} - "{request.method} {url_path} HTTP/1.1" {response.status_code}'
)
+1 -1
View File
@@ -18,4 +18,4 @@ COPY .. .
# Expose the port # Expose the port
EXPOSE 80 EXPOSE 80
CMD ["pipenv", "run", "uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "80"] CMD ["pipenv", "run", "uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "80", "--no-access-log"]