From 3337c751a5ed7be13cfc73e3f7d7da08ff261e83 Mon Sep 17 00:00:00 2001 From: "mark.tian" Date: Sat, 13 Dec 2025 13:41:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=85=A8=E5=B1=80=E6=9C=AA?= =?UTF-8?q?=E5=A4=84=E7=90=86=E5=BC=82=E5=B8=B8=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/main.py b/main.py index 09f8132..8a3cc71 100644 --- a/main.py +++ b/main.py @@ -1,25 +1,49 @@ + +from datetime import datetime +import os +import traceback import signal import tempfile import time -from fastapi import FastAPI -from fastapi.middleware.cors import CORSMiddleware -from contextlib import asynccontextmanager -from sqlalchemy import text -import redis.asyncio as redis import subprocess import sys -import os - from app.config import settings from app.database import engine from app.routes import router from app.logger import LoggerManager, get_main_logger +from contextlib import asynccontextmanager +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware +import redis.asyncio as redis +from sqlalchemy import text # 初始化日志系统 LoggerManager.setup_logging() logger = get_main_logger() +def global_exception_handler(exc_type, exc_value, exc_traceback): + if issubclass(exc_type, KeyboardInterrupt): + sys.__excepthook__(exc_type, exc_value, exc_traceback) + return + + # 获取格式化的异常信息 + error_msg = "捕获到未处理的异常:\n" + error_msg += f"异常类型: {exc_type.__name__}\n" + error_msg += f"异常信息: {exc_value}\n" + error_msg += "堆栈跟踪:\n" + error_msg += ''.join(traceback.format_tb(exc_traceback)) + error_msg += f"异常时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n" + error_msg += "-" * 50 + "\n" + + # 输出到控制台 + print(error_msg) + + # 输出到文件 + logger.error(error_msg) + +# 注册全局异常处理器 +sys.excepthook = global_exception_handler @asynccontextmanager async def lifespan(app: FastAPI): @@ -270,5 +294,6 @@ def start_all_services(): signal_handler(signal.SIGINT, None) if __name__ == "__main__": + 1 / 0 # 直接启动所有服务 start_all_services()