Spaces:
Paused
Paused
alessandro trinca tornidor
commited on
Commit
•
90dbc1a
1
Parent(s):
2ba4f98
[feat] add uuid session logger, add typing hints on function arguments
Browse files
app_gradio_fastapi/helpers/__init__.py
ADDED
File without changes
|
app_gradio_fastapi/helpers/formatters.py
CHANGED
@@ -1,2 +1,30 @@
|
|
1 |
-
|
2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import logging
|
2 |
+
from fastapi import HTTPException
|
3 |
+
|
4 |
+
from app_gradio_fastapi.helpers import session_logger
|
5 |
+
|
6 |
+
|
7 |
+
def divide(a: int, b: int) -> float:
|
8 |
+
logging.info(f"a:{a}, b:{b}.")
|
9 |
+
result = a / b
|
10 |
+
logging.info(f"result:{result}.")
|
11 |
+
return result
|
12 |
+
|
13 |
+
|
14 |
+
@session_logger.set_uuid_logging
|
15 |
+
def request_formatter(text: str) -> dict:
|
16 |
+
logging.info("start request...")
|
17 |
+
try:
|
18 |
+
logging.info(f"input text we need to treat as an integer: {text}.")
|
19 |
+
b = int(text)
|
20 |
+
transformed_text = f"input after integer cast: {b}."
|
21 |
+
try:
|
22 |
+
result_division = divide(100, b)
|
23 |
+
logging.info(f"some_function, result_division:{result_division}.")
|
24 |
+
return {"text": transformed_text, "result": result_division}
|
25 |
+
except ZeroDivisionError as zde:
|
26 |
+
logging.info(f"exception:{zde}.")
|
27 |
+
raise HTTPException(status_code=500, detail="Internal server error")
|
28 |
+
except ValueError as ve:
|
29 |
+
logging.info(f"exception:{ve}.")
|
30 |
+
raise HTTPException(status_code=500, detail="Internal server error")
|
app_gradio_fastapi/helpers/session_logger.py
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import contextvars
|
2 |
+
import logging
|
3 |
+
from functools import wraps
|
4 |
+
from typing import Callable
|
5 |
+
|
6 |
+
logging_uuid = contextvars.ContextVar("uuid")
|
7 |
+
formatter = '%(asctime)s | %(uuid)s [%(pathname)s:%(module)s %(lineno)d] %(levelname)s | %(message)s'
|
8 |
+
|
9 |
+
|
10 |
+
loggingType = logging.CRITICAL | logging.ERROR | logging.WARNING | logging.INFO | logging.DEBUG
|
11 |
+
|
12 |
+
|
13 |
+
def change_logging(level_log: loggingType = logging.INFO) -> None:
|
14 |
+
old_factory = logging.getLogRecordFactory()
|
15 |
+
|
16 |
+
def record_factory(*args, **kwargs):
|
17 |
+
record = old_factory(*args, **kwargs)
|
18 |
+
record.uuid = logging_uuid.get("uuid")
|
19 |
+
if isinstance(record.msg, str):
|
20 |
+
record.msg = record.msg.replace("\\", "\\\\").replace("\n", "\\n")
|
21 |
+
return record
|
22 |
+
|
23 |
+
logging.setLogRecordFactory(record_factory)
|
24 |
+
logging.basicConfig(level=level_log, format=formatter, force=True)
|
25 |
+
|
26 |
+
|
27 |
+
def set_uuid_logging(func: Callable) -> Callable:
|
28 |
+
@wraps(func)
|
29 |
+
def wrapper(*args, **kwargs):
|
30 |
+
import uuid
|
31 |
+
|
32 |
+
current_uuid = f"{uuid.uuid4()}"
|
33 |
+
logging_uuid.set(current_uuid)
|
34 |
+
return func(*args, **kwargs)
|
35 |
+
|
36 |
+
return wrapper
|
app_gradio_fastapi/main.py
CHANGED
@@ -3,8 +3,11 @@ from fastapi import FastAPI
|
|
3 |
|
4 |
from app_gradio_fastapi import routes
|
5 |
from app_gradio_fastapi.helpers.formatters import request_formatter
|
|
|
6 |
|
7 |
|
|
|
|
|
8 |
CUSTOM_GRADIO_PATH = "/"
|
9 |
app = FastAPI(title="logging_app", version="1.0")
|
10 |
app.include_router(routes.router)
|
|
|
3 |
|
4 |
from app_gradio_fastapi import routes
|
5 |
from app_gradio_fastapi.helpers.formatters import request_formatter
|
6 |
+
from app_gradio_fastapi.helpers.session_logger import change_logging
|
7 |
|
8 |
|
9 |
+
change_logging()
|
10 |
+
|
11 |
CUSTOM_GRADIO_PATH = "/"
|
12 |
app = FastAPI(title="logging_app", version="1.0")
|
13 |
app.include_router(routes.router)
|
app_gradio_fastapi/routes.py
CHANGED
@@ -3,12 +3,15 @@ import logging
|
|
3 |
|
4 |
from fastapi import APIRouter
|
5 |
|
|
|
|
|
6 |
|
7 |
router = APIRouter()
|
8 |
|
9 |
|
10 |
@router.get("/health")
|
11 |
-
|
|
|
12 |
try:
|
13 |
logging.info("health check")
|
14 |
return json.dumps({"msg": "ok"})
|
|
|
3 |
|
4 |
from fastapi import APIRouter
|
5 |
|
6 |
+
from app_gradio_fastapi.helpers import session_logger
|
7 |
+
|
8 |
|
9 |
router = APIRouter()
|
10 |
|
11 |
|
12 |
@router.get("/health")
|
13 |
+
@session_logger.set_uuid_logging
|
14 |
+
def health() -> str:
|
15 |
try:
|
16 |
logging.info("health check")
|
17 |
return json.dumps({"msg": "ok"})
|