From 98d7bed064ef52bd24b9b779dbb851b3a0a4b4bb Mon Sep 17 00:00:00 2001 From: DrSmoothl <1787882683@qq.com> Date: Fri, 13 Mar 2026 00:23:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=BC=BA=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E8=BF=87=E7=A8=8B=EF=BC=8C=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=20on=5Fload=20=E5=A4=B1=E8=B4=A5=E7=9A=84=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=B9=B6=E8=B7=B3=E8=BF=87=E6=B3=A8=E5=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugin_runtime/runner/log_handler.py | 3 ++- src/plugin_runtime/runner/runner_main.py | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/plugin_runtime/runner/log_handler.py b/src/plugin_runtime/runner/log_handler.py index 11d1e4d0..24d5f9b6 100644 --- a/src/plugin_runtime/runner/log_handler.py +++ b/src/plugin_runtime/runner/log_handler.py @@ -59,7 +59,8 @@ class RunnerIPCLogHandler(logging.Handler): FLUSH_BATCH_SIZE: int = 20 #: 仅转发 logger name 以这些前缀开头的日志,第三方库日志将被忽略 - ALLOWED_LOGGER_PREFIXES: tuple[str, ...] = ("plugin.", "plugin_runtime.") + #: 包含 "_maibot_plugin_" 前缀以覆盖插件模块中 logging.getLogger(__name__) 的场景 + ALLOWED_LOGGER_PREFIXES: tuple[str, ...] = ("plugin.", "plugin_runtime.", "_maibot_plugin_") def __init__(self) -> None: super().__init__() diff --git a/src/plugin_runtime/runner/runner_main.py b/src/plugin_runtime/runner/runner_main.py index db08bb24..41d91a1f 100644 --- a/src/plugin_runtime/runner/runner_main.py +++ b/src/plugin_runtime/runner/runner_main.py @@ -84,6 +84,7 @@ class PluginRunner: logger.info(f"已加载 {len(plugins)} 个插件") # 4. 注入 PluginContext + 调用 on_load 生命周期钩子 + failed_plugins: set[str] = set() for meta in plugins: instance = meta.instance self._inject_context(meta.plugin_id, instance) @@ -93,10 +94,13 @@ class PluginRunner: if asyncio.iscoroutine(ret): await ret except Exception as e: - logger.error(f"插件 {meta.plugin_id} on_load 失败: {e}", exc_info=True) + logger.error(f"插件 {meta.plugin_id} on_load 失败,跳过注册: {e}", exc_info=True) + failed_plugins.add(meta.plugin_id) - # 5. 向 Host 注册所有插件的组件 + # 5. 向 Host 注册所有插件的组件(跳过 on_load 失败的插件) for meta in plugins: + if meta.plugin_id in failed_plugins: + continue await self._register_plugin(meta) # 5. 等待直到收到关停信号