feat(light): 添加信息灯牌功能及相关组件

- 新增light路由模块,提供灯牌脚本和答案的API接口
- 添加MongoDB连接工具类,支持异步和同步操作
- 实现灯牌服务层,包含数据缓存逻辑
- 移除数据库日志功能,简化日志模块
- 更新依赖项,添加starlette、anyio等MongoDB相关包
This commit is contained in:
2025-12-16 13:31:04 +08:00
parent 94b6cc8f8d
commit 6e5b59bde6
8 changed files with 342 additions and 133 deletions

View File

@@ -3,14 +3,10 @@ import os
import logging
import traceback
from typing import Optional
from datetime import datetime
# 将项目根目录添加到 Python 路径中,确保可以正确导入项目模块
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
from src.db.database import get_db
from src.db.models import Log
# 配置基础日志设置
logging.basicConfig(
level=logging.INFO,
@@ -20,61 +16,6 @@ logging.basicConfig(
# 创建模块级日志记录器
logger = logging.getLogger(__name__)
def log_to_database(
level: str,
message: str,
module: str,
function: Optional[str] = None,
traceback_info: Optional[str] = None,
request_url: Optional[str] = None,
request_method: Optional[str] = None,
user_agent: Optional[str] = None,
ip_address: Optional[str] = None,
user_id: Optional[int] = None
):
"""
将日志信息保存到数据库
参数:
- level: 日志级别 (INFO, WARNING, ERROR, DEBUG)
- message: 日志消息内容
- module: 产生日志的模块名
- function: 产生日志的函数名(可选)
- traceback_info: 异常堆栈信息(可选)
- request_url: 请求URL可选
- request_method: 请求方法(可选)
- user_agent: 用户代理信息(可选)
- ip_address: IP地址可选
- user_id: 用户ID可选
"""
try:
# 获取数据库会话
db_generator = get_db()
db = next(db_generator)
# 创建日志条目对象
log_entry = Log(
level=level,
message=message,
module=module,
function=function,
traceback=traceback_info,
request_url=request_url,
request_method=request_method,
user_agent=user_agent,
ip_address=ip_address,
user_id=user_id
)
# 保存到数据库
db.add(log_entry)
db.commit()
db.refresh(log_entry)
db.close()
except Exception as e:
# 如果数据库记录失败,至少打印到控制台
logger.error(f"Failed to log to database: {str(e)}")
def capture_exception(
exception: Exception,
module: str,
@@ -86,7 +27,7 @@ def capture_exception(
user_id: Optional[int] = None
):
"""
捕获并记录异常信息
捕获并记录异常信息到控制台
参数:
- exception: 捕获到的异常对象
@@ -101,26 +42,12 @@ def capture_exception(
# 获取异常堆栈信息
tb_str = ''.join(traceback.format_exception(type(exception), exception, exception.__traceback__))
# 记录错误日志到数据库和控制台
log_to_database(
level="ERROR",
message=str(exception),
module=module,
function=function,
traceback_info=tb_str,
request_url=request_url,
request_method=request_method,
user_agent=user_agent,
ip_address=ip_address,
user_id=user_id
)
# 同时打印到控制台
# 打印到控制台
logger.error(f"[{module}] {str(exception)}", exc_info=True)
def info(message: str, module: str, function: Optional[str] = None):
"""
记录INFO级别日志
记录INFO级别日志到控制台
参数:
- message: 日志消息内容
@@ -128,11 +55,10 @@ def info(message: str, module: str, function: Optional[str] = None):
- function: 产生日志的函数名(可选)
"""
logger.info(f"[{module}] {message}")
log_to_database("INFO", message, module, function)
def warning(message: str, module: str, function: Optional[str] = None):
"""
记录WARNING级别日志
记录WARNING级别日志到控制台
参数:
- message: 日志消息内容
@@ -140,11 +66,10 @@ def warning(message: str, module: str, function: Optional[str] = None):
- function: 产生日志的函数名(可选)
"""
logger.warning(f"[{module}] {message}")
log_to_database("WARNING", message, module, function)
def error(message: str, module: str, function: Optional[str] = None):
"""
记录ERROR级别日志
记录ERROR级别日志到控制台
参数:
- message: 日志消息内容
@@ -152,16 +77,14 @@ def error(message: str, module: str, function: Optional[str] = None):
- function: 产生日志的函数名(可选)
"""
logger.error(f"[{module}] {message}")
log_to_database("ERROR", message, module, function)
def debug(message: str, module: str, function: Optional[str] = None):
"""
记录DEBUG级别日志
记录DEBUG级别日志到控制台
参数:
- message: 日志消息内容
- module: 产生日志的模块名
- function: 产生日志的函数名(可选)
"""
logger.debug(f"[{module}] {message}")
log_to_database("DEBUG", message, module, function)
logger.debug(f"[{module}] {message}")