API: Add request logging
Log all the parts of a request if the config flag is set. The logged fields are all server side anyways, so nothing is being exposed to clients. Signed-off-by: kingbri <bdashore3@proton.me>
This commit is contained in:
parent
522999ebb4
commit
3826815edb
4 changed files with 61 additions and 28 deletions
|
|
@ -51,10 +51,7 @@ def from_args(args: dict):
|
|||
cur_logging_config = logging_config()
|
||||
GLOBAL_CONFIG["logging"] = {
|
||||
**cur_logging_config,
|
||||
**{
|
||||
k.replace("log_", ""): logging_override[k]
|
||||
for k in logging_override
|
||||
},
|
||||
**{k.replace("log_", ""): logging_override[k] for k in logging_override},
|
||||
}
|
||||
|
||||
developer_override = args.get("developer")
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
"""Common utility functions"""
|
||||
|
||||
import asyncio
|
||||
import json
|
||||
import socket
|
||||
import traceback
|
||||
from fastapi import HTTPException, Request
|
||||
from fastapi import Depends, HTTPException, Request
|
||||
from loguru import logger
|
||||
from pydantic import BaseModel
|
||||
from typing import Optional
|
||||
|
|
@ -108,3 +109,32 @@ async def add_request_id(request: Request):
|
|||
|
||||
request.state.id = uuid4().hex
|
||||
return request
|
||||
|
||||
|
||||
async def log_request(request: Request):
|
||||
"""FastAPI depends to log a request to the user."""
|
||||
|
||||
log_message = [f"Information for {request.method} request {request.state.id}:"]
|
||||
|
||||
log_message.append(f"URL: {request.url}")
|
||||
log_message.append(f"Headers: {dict(request.headers)}")
|
||||
|
||||
if request.method != "GET":
|
||||
body_bytes = await request.body()
|
||||
if body_bytes:
|
||||
body = json.loads(body_bytes.decode("utf-8"))
|
||||
|
||||
log_message.append(f"Body: {dict(body)}")
|
||||
|
||||
logger.info("\n".join(log_message))
|
||||
|
||||
|
||||
def get_global_depends():
|
||||
"""Returns global dependencies for a FastAPI app."""
|
||||
|
||||
depends = [Depends(add_request_id)]
|
||||
|
||||
if config.logging_config().get("requests"):
|
||||
depends.append(Depends(log_request))
|
||||
|
||||
return depends
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue