优化日志
This commit is contained in:
@@ -67,7 +67,7 @@ async def get_replyer(
|
||||
request_type=request_type,
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"[GeneratorAPI] 获取回复器时发生意外错误: {e}", exc_info=True)
|
||||
logger.error(f"[GeneratorAPI] 获取回复器时发生意外错误: {e}")
|
||||
traceback.print_exc()
|
||||
return None
|
||||
|
||||
|
||||
@@ -63,7 +63,6 @@ class PermissionAPI:
|
||||
|
||||
def set_permission_manager(self, manager: IPermissionManager):
|
||||
self._permission_manager = manager
|
||||
logger.info("权限管理器已设置")
|
||||
|
||||
def _ensure_manager(self):
|
||||
if self._permission_manager is None:
|
||||
|
||||
@@ -310,6 +310,15 @@ async def _send_to_target(
|
||||
timestamp=current_time,
|
||||
)
|
||||
|
||||
# Use readable display text so binary/base64 payloads are not stored directly
|
||||
display_message_for_db = display_message or ""
|
||||
if not display_message_for_db:
|
||||
if message_type in {"emoji", "image", "voice", "video", "file"}:
|
||||
# Leave empty to keep processed_plain_text (e.g., generated descriptions) instead of raw payloads
|
||||
display_message_for_db = ""
|
||||
elif isinstance(content, str):
|
||||
display_message_for_db = content
|
||||
|
||||
sent_msg = await heart_fc_sender.send_message(
|
||||
envelope,
|
||||
chat_stream=target_stream,
|
||||
@@ -317,7 +326,7 @@ async def _send_to_target(
|
||||
storage_message=storage_message,
|
||||
show_log=show_log,
|
||||
thinking_start_time=current_time,
|
||||
display_message=display_message or (content if isinstance(content, str) else ""),
|
||||
display_message=display_message_for_db,
|
||||
)
|
||||
|
||||
if sent_msg:
|
||||
|
||||
@@ -92,7 +92,7 @@ class PluginStorage:
|
||||
os.makedirs(directory)
|
||||
logger.info(f"目录 '{directory}' 创建成功。")
|
||||
except Exception as e:
|
||||
logger.error(f"创建存储目录时发生错误: {e}", exc_info=True)
|
||||
logger.error(f"创建存储目录时发生错误: {e}")
|
||||
raise
|
||||
|
||||
def _load_data(self) -> None:
|
||||
@@ -130,7 +130,7 @@ class PluginStorage:
|
||||
self._dirty = False # 保存后重置标志
|
||||
logger.debug(f"插件 '{self.name}' 的数据已成功保存到磁盘。")
|
||||
except Exception as e:
|
||||
logger.error(f"向 '{self.file_path}' 保存数据时发生错误: {e}", exc_info=True)
|
||||
logger.error(f"向 '{self.file_path}' 保存数据时发生错误: {e}")
|
||||
raise
|
||||
|
||||
def get(self, key: str, default: Any | None = None) -> Any:
|
||||
@@ -203,5 +203,5 @@ def get_local_storage(name: str) -> "PluginStorage":
|
||||
storage_instance = PluginStorageManager.get_storage(name)
|
||||
return storage_instance
|
||||
except Exception as e:
|
||||
logger.critical(f"为插件 '{name}' 提供本地存储实例时发生严重错误: {e}", exc_info=True)
|
||||
logger.critical(f"为插件 '{name}' 提供本地存储实例时发生严重错误: {e}")
|
||||
raise
|
||||
|
||||
@@ -365,7 +365,6 @@ class UnifiedScheduler:
|
||||
logger.warning("调度器已在运行中")
|
||||
return
|
||||
|
||||
logger.info("正在启动统一调度器...")
|
||||
self._running = True
|
||||
self._stopping = False
|
||||
self._start_time = datetime.now()
|
||||
@@ -384,14 +383,14 @@ class UnifiedScheduler:
|
||||
except ImportError:
|
||||
logger.warning("无法导入 event_manager,事件触发功能将不可用")
|
||||
|
||||
logger.info("统一调度器已启动")
|
||||
logger.debug("统一调度器已启动")
|
||||
|
||||
async def stop(self) -> None:
|
||||
"""停止调度器(优雅关闭)"""
|
||||
if not self._running:
|
||||
return
|
||||
|
||||
logger.info("正在停止统一调度器...")
|
||||
logger.debug("正在停止统一调度器...")
|
||||
self._stopping = True
|
||||
self._running = False
|
||||
|
||||
@@ -486,7 +485,7 @@ class UnifiedScheduler:
|
||||
logger.debug("调度器主循环被取消")
|
||||
break
|
||||
except Exception as e:
|
||||
logger.error(f"调度器主循环发生错误: {e}", exc_info=True)
|
||||
logger.error(f"调度器主循环发生错误: {e}")
|
||||
|
||||
async def _deadlock_check_loop(self) -> None:
|
||||
"""死锁检测循环"""
|
||||
@@ -504,7 +503,7 @@ class UnifiedScheduler:
|
||||
logger.debug("死锁检测循环被取消")
|
||||
break
|
||||
except Exception as e:
|
||||
logger.error(f"死锁检测循环发生错误: {e}", exc_info=True)
|
||||
logger.error(f"死锁检测循环发生错误: {e}")
|
||||
# 继续运行,不因单次错误停止
|
||||
|
||||
async def _cleanup_loop(self) -> None:
|
||||
@@ -522,7 +521,7 @@ class UnifiedScheduler:
|
||||
logger.debug("清理循环被取消")
|
||||
break
|
||||
except Exception as e:
|
||||
logger.error(f"清理循环发生错误: {e}", exc_info=True)
|
||||
logger.error(f"清理循环发生错误: {e}")
|
||||
|
||||
# ==================== 任务触发逻辑 ====================
|
||||
|
||||
@@ -541,7 +540,7 @@ class UnifiedScheduler:
|
||||
if should_trigger:
|
||||
tasks_to_trigger.append(task)
|
||||
except Exception as e:
|
||||
logger.error(f"检查任务 {task.task_name} 触发条件时出错: {e}", exc_info=True)
|
||||
logger.error(f"检查任务 {task.task_name} 触发条件时出错: {e}")
|
||||
|
||||
# 第二阶段:并发触发所有任务
|
||||
if tasks_to_trigger:
|
||||
@@ -604,7 +603,7 @@ class UnifiedScheduler:
|
||||
result = condition_func()
|
||||
return bool(result)
|
||||
except Exception as e:
|
||||
logger.error(f"执行任务 {task.task_name} 的自定义条件函数时出错: {e}", exc_info=True)
|
||||
logger.error(f"执行任务 {task.task_name} 的自定义条件函数时出错: {e}")
|
||||
return False
|
||||
|
||||
async def _trigger_tasks_concurrently(self, tasks: list[ScheduleTask]) -> None:
|
||||
@@ -659,7 +658,7 @@ class UnifiedScheduler:
|
||||
|
||||
except Exception as e:
|
||||
# 任务执行失败
|
||||
logger.error(f"任务 {task.task_name} 执行失败: {e}", exc_info=True)
|
||||
logger.error(f"任务 {task.task_name} 执行失败: {e}")
|
||||
task.finish_execution(success=False, error=e)
|
||||
self._total_failures += 1
|
||||
|
||||
@@ -695,7 +694,7 @@ class UnifiedScheduler:
|
||||
)
|
||||
return result
|
||||
except Exception as e:
|
||||
logger.error(f"执行任务 {task.task_name} 的回调函数时出错: {e}", exc_info=True)
|
||||
logger.error(f"执行任务 {task.task_name} 的回调函数时出错: {e}")
|
||||
raise
|
||||
|
||||
def _acquire_semaphore(self):
|
||||
@@ -803,7 +802,7 @@ class UnifiedScheduler:
|
||||
raise
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"事件任务 {task.task_name} 执行失败: {e}", exc_info=True)
|
||||
logger.error(f"事件任务 {task.task_name} 执行失败: {e}")
|
||||
task.finish_execution(success=False, error=e)
|
||||
self._total_failures += 1
|
||||
|
||||
@@ -823,7 +822,7 @@ class UnifiedScheduler:
|
||||
except RecursionError:
|
||||
logger.error("死锁检测发生递归错误,跳过本轮检测")
|
||||
except Exception as e:
|
||||
logger.error(f"死锁检测处理失败: {e}", exc_info=True)
|
||||
logger.error(f"死锁检测处理失败: {e}")
|
||||
|
||||
async def _check_and_handle_deadlocks(self) -> None:
|
||||
"""检查并处理死锁任务"""
|
||||
@@ -847,7 +846,7 @@ class UnifiedScheduler:
|
||||
try:
|
||||
await self._cancel_task(task, reason="deadlock detected")
|
||||
except Exception as e:
|
||||
logger.error(f"取消任务 {task_name} 时出错: {e}", exc_info=True)
|
||||
logger.error(f"取消任务 {task_name} 时出错: {e}")
|
||||
# 强制清理
|
||||
task._asyncio_task = None
|
||||
task.status = TaskStatus.CANCELLED
|
||||
@@ -884,7 +883,7 @@ class UnifiedScheduler:
|
||||
break
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"取消任务 {task.task_name} 时发生异常: {e}", exc_info=True)
|
||||
logger.error(f"取消任务 {task.task_name} 时发生异常: {e}")
|
||||
return False
|
||||
|
||||
# 第三阶段:强制清理
|
||||
@@ -1095,7 +1094,7 @@ class UnifiedScheduler:
|
||||
await exec_task
|
||||
return task.status == TaskStatus.COMPLETED
|
||||
except Exception as e:
|
||||
logger.error(f"强制触发任务 {task.task_name} 失败: {e}", exc_info=True)
|
||||
logger.error(f"强制触发任务 {task.task_name} 失败: {e}")
|
||||
return False
|
||||
|
||||
async def pause_schedule(self, schedule_id: str) -> bool:
|
||||
@@ -1293,19 +1292,13 @@ async def initialize_scheduler():
|
||||
这个函数应该在 bot 启动时调用
|
||||
"""
|
||||
try:
|
||||
logger.info("正在启动统一调度器...")
|
||||
await unified_scheduler.start()
|
||||
logger.info("统一调度器启动成功")
|
||||
|
||||
# 获取初始统计信息
|
||||
stats = unified_scheduler.get_statistics()
|
||||
logger.info(f"调度器状态: {stats}")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"启动统一调度器失败: {e}", exc_info=True)
|
||||
logger.error(f"启动统一调度器失败: {e}")
|
||||
raise
|
||||
|
||||
|
||||
async def shutdown_scheduler():
|
||||
"""关闭调度器
|
||||
|
||||
@@ -1329,4 +1322,4 @@ async def shutdown_scheduler():
|
||||
logger.info("统一调度器已关闭")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"关闭统一调度器失败: {e}", exc_info=True)
|
||||
logger.error(f"关闭统一调度器失败: {e}")
|
||||
|
||||
Reference in New Issue
Block a user