mirror of
https://github.com/jihe520/MathModelAgent.git
synced 2026-10-18 05:30:18 +08:00
LLM 层重构: - 将 LLM 调用层重构为 Provider 模式,支持多 API 类型 - 新增 Anthropic、OpenAI Chat、OpenAI Responses 三种 Provider - 新增 LLM 类型定义和工厂类 WebSocket 重连: - 添加指数退避自动重连机制(初始 1s,最大 30s,最多 10 次) - 区分手动关闭与意外断开,仅意外断开触发重连 - 在任务页面顶部添加连接状态指示灯(绿/黄/红) 图表字体跨平台兼容: - 在 backend/fonts/ 存放 SimHei 字体文件 - create_work_dir() 自动复制字体到任务工作目录 - 两个解释器从工作目录动态加载字体 - E2B 移除 apt-get install 依赖,改用上传字体文件 - 统一三处字体优先级配置 其他: - 重构注释规范、修复类型错误、添加 lint hook - 更新 CLAUDE.md 项目文档
60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
"""日志初始化模块,配置 loguru 日志格式和输出。"""
|
|
|
|
import os
|
|
import sys
|
|
import time
|
|
from loguru import logger as _logger # type: ignore[import-unresolved]
|
|
|
|
|
|
class LoggerInitializer:
|
|
"""日志初始化器,配置控制台和文件日志输出。"""
|
|
def __init__(self):
|
|
self.log_path = os.path.join(os.getcwd(), "logs")
|
|
self.__ensure_log_directory_exists()
|
|
self.log_path_error = os.path.join(
|
|
self.log_path, f"{time.strftime('%Y-%m-%d')}_error.log"
|
|
)
|
|
|
|
def __ensure_log_directory_exists(self):
|
|
"""
|
|
确保日志目录存在,如果不存在则创建
|
|
"""
|
|
if not os.path.exists(self.log_path):
|
|
os.mkdir(self.log_path)
|
|
|
|
@staticmethod
|
|
def __filter(record):
|
|
"""自定义日志过滤器,保留所有日志。"""
|
|
return True
|
|
|
|
def init_log(self):
|
|
"""
|
|
初始化日志配置
|
|
"""
|
|
# 自定义日志格式
|
|
format_str = (
|
|
"<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
|
|
"<level>{level: <8}</level> | "
|
|
"<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - "
|
|
"<level>{message}</level>"
|
|
)
|
|
_logger.remove()
|
|
# 移除后重新添加sys.stderr, 目的: 控制台输出与文件日志内容和结构一致
|
|
_logger.add(sys.stderr, filter=self.__filter, format=format_str, enqueue=False)
|
|
_logger.add(
|
|
self.log_path_error,
|
|
filter=self.__filter,
|
|
format=format_str,
|
|
rotation="50MB",
|
|
encoding="utf-8",
|
|
enqueue=False,
|
|
compression="zip",
|
|
)
|
|
|
|
return _logger
|
|
|
|
|
|
# 初始化日志处理器
|
|
log_initializer = LoggerInitializer()
|
|
logger = log_initializer.init_log()
|