优化日志
This commit is contained in:
@@ -28,8 +28,32 @@ logger = get_logger("adapter_manager")
|
||||
|
||||
|
||||
def _load_class(module_name: str, class_name: str):
|
||||
"""
|
||||
从模块加载类。
|
||||
|
||||
有时插件加载器会将适配器类注册到包名下(例如 ``src.plugins.built_in.napcat_adapter``),
|
||||
而实际的类定义在 ``plugin.py`` 中。当子进程仅导入包时,该属性缺失会引发 AttributeError。
|
||||
该辅助函数现在回退到 ``<module>.plugin`` 以支持这种布局。
|
||||
"""
|
||||
module = importlib.import_module(module_name)
|
||||
return getattr(module, class_name)
|
||||
if hasattr(module, class_name):
|
||||
return getattr(module, class_name)
|
||||
|
||||
# Fallback for packages that keep implementations in plugin.py
|
||||
try:
|
||||
plugin_module = importlib.import_module(f"{module_name}.plugin")
|
||||
if hasattr(plugin_module, class_name):
|
||||
return getattr(plugin_module, class_name)
|
||||
except ModuleNotFoundError:
|
||||
pass
|
||||
except Exception:
|
||||
logger.error(
|
||||
f"Failed to load class {class_name} from fallback module {module_name}.plugin",
|
||||
exc_info=True,
|
||||
)
|
||||
|
||||
# If we reach here, the class is truly missing
|
||||
raise AttributeError(f"module '{module_name}' has no attribute '{class_name}'")
|
||||
|
||||
|
||||
def _adapter_process_entry(
|
||||
@@ -127,7 +151,7 @@ class AdapterProcess:
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"启动适配器子进程 {self.adapter_name} 失败: {e}", exc_info=True)
|
||||
logger.error(f"启动适配器子进程 {self.adapter_name} 失败: {e}")
|
||||
return False
|
||||
|
||||
async def stop(self) -> None:
|
||||
@@ -154,7 +178,7 @@ class AdapterProcess:
|
||||
self.process.join()
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"停止适配器子进程 {self.adapter_name} 时发生错误: {e}", exc_info=True)
|
||||
logger.error(f"停止适配器子进程 {self.adapter_name} 时发生错误: {e}")
|
||||
finally:
|
||||
self.process = None
|
||||
self._incoming_queue = None
|
||||
@@ -258,7 +282,7 @@ class AdapterManager:
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"启动适配器 {adapter_name} 失败: {e}", exc_info=True)
|
||||
logger.error(f"启动适配器 {adapter_name} 失败: {e}")
|
||||
return False
|
||||
|
||||
async def stop_adapter(self, adapter_name: str) -> None:
|
||||
@@ -280,7 +304,7 @@ class AdapterManager:
|
||||
await adapter.stop()
|
||||
logger.info(f"适配器 {adapter_name} 已从主进程中停止")
|
||||
except Exception as e:
|
||||
logger.error(f"停止适配器 {adapter_name} 时出错: {e}", exc_info=True)
|
||||
logger.error(f"停止适配器 {adapter_name} 时出错: {e}")
|
||||
|
||||
async def start_all_adapters(self) -> None:
|
||||
"""启动所有已注册的适配器"""
|
||||
@@ -358,4 +382,4 @@ def get_adapter_manager() -> AdapterManager:
|
||||
return _adapter_manager
|
||||
|
||||
|
||||
__all__ = ["AdapterManager", "AdapterProcess", "get_adapter_manager"]
|
||||
__all__ = ["AdapterManager", "AdapterProcess", "get_adapter_manager"]
|
||||
|
||||
@@ -428,7 +428,7 @@ class ComponentRegistry:
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"注册路由组件 '{router_info.name}' 时出错: {e}", exc_info=True)
|
||||
logger.error(f"注册路由组件 '{router_info.name}' 时出错: {e}")
|
||||
return False
|
||||
|
||||
def _register_adapter_component(self, adapter_info: AdapterInfo, adapter_class: type[BaseAdapter]) -> bool:
|
||||
|
||||
@@ -342,7 +342,7 @@ class EventManager:
|
||||
# 使用 create_task 异步执行,避免死锁
|
||||
asyncio.create_task(self._scheduler_callback(event_name, params))
|
||||
except Exception as e:
|
||||
logger.error(f"调用 scheduler 回调时出错: {e}", exc_info=True)
|
||||
logger.error(f"调用 scheduler 回调时出错: {e}")
|
||||
|
||||
timeout = handler_timeout if handler_timeout is not None else self._default_handler_timeout
|
||||
concurrency = max_concurrency if max_concurrency is not None else self._default_handler_concurrency
|
||||
|
||||
@@ -30,11 +30,11 @@ class PermissionManager(IPermissionManager):
|
||||
"""异步初始化数据库连接"""
|
||||
self.engine = await get_engine()
|
||||
self.SessionLocal = async_sessionmaker(bind=self.engine)
|
||||
logger.info("权限管理器初始化完成")
|
||||
logger.debug("权限管理器初始化完成")
|
||||
|
||||
def _load_master_users(self):
|
||||
"""从配置文件加载Master用户列表"""
|
||||
logger.info("开始从配置文件加载Master用户...")
|
||||
logger.debug("开始从配置文件加载Master用户...")
|
||||
try:
|
||||
master_users_config = global_config.permission.master_users
|
||||
if not isinstance(master_users_config, list):
|
||||
@@ -61,7 +61,7 @@ class PermissionManager(IPermissionManager):
|
||||
logger.info(f"成功加载 {len(self._master_users)} 个Master用户")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"加载Master用户配置时发生严重错误: {e}", exc_info=True)
|
||||
logger.error(f"加载Master用户配置时发生严重错误: {e}")
|
||||
self._master_users = set()
|
||||
|
||||
def reload_master_users(self):
|
||||
|
||||
@@ -179,7 +179,7 @@ class PluginManager:
|
||||
error_msg = f"未知错误: {e!s}"
|
||||
self.failed_plugins[plugin_name] = error_msg
|
||||
logger.error(f"❌ 插件加载失败: {plugin_name} - {error_msg}")
|
||||
logger.debug("详细错误信息: ", exc_info=True)
|
||||
logger.debug("详细错误信息: ")
|
||||
return False, 1
|
||||
|
||||
async def _register_adapter_components(self, plugin_name: str, plugin_instance: PluginBase) -> None:
|
||||
@@ -238,7 +238,7 @@ class PluginManager:
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"处理插件 '{plugin_name}' 的适配器组件时出错: {e}", exc_info=True)
|
||||
logger.error(f"处理插件 '{plugin_name}' 的适配器组件时出错: {e}")
|
||||
|
||||
async def remove_registered_plugin(self, plugin_name: str) -> bool:
|
||||
"""
|
||||
@@ -682,7 +682,7 @@ class PluginManager:
|
||||
asyncio.run(component_registry.unregister_plugin(plugin_name))
|
||||
except Exception as e: # 捕获并记录卸载阶段协程调用错误
|
||||
logger.debug(
|
||||
f"卸载插件时调用 component_registry.unregister_plugin 失败: {e}", exc_info=True
|
||||
f"卸载插件时调用 component_registry.unregister_plugin 失败: {e}"
|
||||
)
|
||||
|
||||
# 从已加载插件中移除
|
||||
@@ -700,7 +700,7 @@ class PluginManager:
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ 插件卸载失败: {plugin_name} - {e!s}", exc_info=True)
|
||||
logger.error(f"❌ 插件卸载失败: {plugin_name} - {e!s}")
|
||||
return False
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user