feat: 增强插件加载过程,记录 on_load 失败的插件并跳过注册
This commit is contained in:
@@ -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__()
|
||||
|
||||
@@ -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. 等待直到收到关停信号
|
||||
|
||||
Reference in New Issue
Block a user