From f70a2cfde60e9945b653a2c306d4c0a366cb7e21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=20=E6=9F=8F?= Date: Sat, 1 Feb 2025 19:40:01 +0900 Subject: [PATCH] update operation --- backend/app/core/dbmanager.py | 3 +-- backend/app/core/operation.py | 23 +++++++++++++++-------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/backend/app/core/dbmanager.py b/backend/app/core/dbmanager.py index d32a612..abf62eb 100644 --- a/backend/app/core/dbmanager.py +++ b/backend/app/core/dbmanager.py @@ -15,7 +15,6 @@ def get_db(request: Request,tenant:str = "1",tenantdb = Depends(get_tenant_db)): db.close() -def get_log_db(request: Request): +def get_log_db(): db = tenantdb.get_db() - request.state.db = db return db \ No newline at end of file diff --git a/backend/app/core/operation.py b/backend/app/core/operation.py index b400355..fdd8e56 100644 --- a/backend/app/core/operation.py +++ b/backend/app/core/operation.py @@ -1,12 +1,12 @@ from fastapi import Request +from fastapi.responses import JSONResponse from starlette.middleware.base import BaseHTTPMiddleware from sqlalchemy.orm import Session from app.db.models import OperationLog,User - -from functools import wraps -from fastapi import Request -from contextvars import ContextVar +from app.core.apiexception import APIException +from app.core.dbmanager import get_log_db +from app.db.crud import create_log import json class LoggingMiddleware(BaseHTTPMiddleware): @@ -24,7 +24,10 @@ class LoggingMiddleware(BaseHTTPMiddleware): state = request.state except Exception as e: await self.log_error(request, e) - raise + response = JSONResponse( + content={"detail": "Internal Server Error"}, + status_code=500 + ) if hasattr(request.state, "user") and hasattr(request.state, "tenant"): await self.log_request(request, response,state) @@ -51,9 +54,13 @@ class LoggingMiddleware(BaseHTTPMiddleware): print(f"Logging failed: {str(e)}") - async def log_error(self, request: Request, exc: Exception): - # 错误处理逻辑 - pass + async def log_error(self, request: Request, e: Exception): + exc = APIException('operation:dispatch',request.url._url,f"Error occurred while writting operation log:",e) + db = get_log_db() + try: + create_log(db,exc.error) + finally: + db.close() async def write_log_to_db(self, db_operation,db): db.add(db_operation)