diff --git a/backend/common/queue.py b/backend/common/queue.py index 921c15a3..9bc91727 100644 --- a/backend/common/queue.py +++ b/backend/common/queue.py @@ -2,6 +2,8 @@ import asyncio from asyncio import Queue +from backend.common.log import log + async def batch_dequeue(queue: Queue, max_items: int, timeout: float) -> list: """ @@ -23,5 +25,7 @@ async def batch_dequeue(queue: Queue, max_items: int, timeout: float) -> list: await asyncio.wait_for(collector(), timeout=timeout) except asyncio.TimeoutError: pass + except Exception as e: + log.error(f'队列批量获取失败: {e}') return items diff --git a/backend/middleware/opera_log_middleware.py b/backend/middleware/opera_log_middleware.py index d0a77df0..874cce67 100644 --- a/backend/middleware/opera_log_middleware.py +++ b/backend/middleware/opera_log_middleware.py @@ -227,6 +227,8 @@ class OperaLogMiddleware(BaseHTTPMiddleware): log.info('自动执行【操作日志批量创建】任务...') async with async_db_session.begin() as db: await opera_log_service.bulk_create(db=db, objs=logs) + except Exception as e: + log.error(f'操作日志入库失败,丢失 {len(logs)} 条日志: {e}') finally: - if not cls.opera_log_queue.empty(): + for _ in range(len(logs)): cls.opera_log_queue.task_done()