feat: 增强插件加载过程,记录 on_load 失败的插件并跳过注册

This commit is contained in:
DrSmoothl
2026-03-13 00:23:27 +08:00
parent e445c483b0
commit 98d7bed064
2 changed files with 8 additions and 3 deletions

View File

@@ -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__()

View File

@@ -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. 等待直到收到关停信号