diff --git a/.gitignore b/.gitignore index 483ad90..de0c399 100644 --- a/.gitignore +++ b/.gitignore @@ -4,23 +4,82 @@ __pycache__/ *.pyc *.pyo *.pyd +.Python +env/ +venv/ +.venv/ +pip-log.txt +pip-delete-this-directory.txt +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.log +*.pot +*.mo +MoeMyanmar-* +!MoeMyanmar-*/**/*.py +!MoeMyanmar-*/**/*.txt +!MoeMyanmar-*/**/*.md +!MoeMyanmar-*/**/*.json +!MoeMyanmar-*/**/*.yml +!MoeMyanmar-*/**/*.yaml +julia-*/ +zig*/ # Dependencies -.venv/ -venv/ +node_modules/ +target/ +.gradle/ +.mypy_cache/ +.pytest_cache/ +.hypothesis/ + +# Distribution / packaging +.Python +_build/ +buck-out/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# IDEs +.vscode/ +.idea/ +*.swp +*.swo + +# System +.DS_Store +Thumbs.db .env .env.local *.env.* -# Editors -.vscode/ -.idea/ - # Logs *.log -# Build artifacts -dist/ -build/ -target/ +# Coverage +coverage/ +htmlcov/ +.coverage + +# Temporary files +*.tmp +*.temp ``` \ No newline at end of file diff --git a/oss/config/config.py b/oss/config/config.py index 5d1df84..af88216 100644 --- a/oss/config/config.py +++ b/oss/config/config.py @@ -64,7 +64,7 @@ class Config: if key in self.DEFAULTS: self._config[key] = value except Exception as e: - print(f"[Config] 加载配置文件失败:{e}") + print(f"[Config] 加载配置文件失败:{type(e).__name__}: {e}") def _load_from_env(self): """从环境变量加载""" diff --git a/oss/plugin/__pycache__/loader.cpython-312.pyc b/oss/plugin/__pycache__/loader.cpython-312.pyc index 4c0616d..88babbe 100644 Binary files a/oss/plugin/__pycache__/loader.cpython-312.pyc and b/oss/plugin/__pycache__/loader.cpython-312.pyc differ diff --git a/store/@{FutureOSS}/auto-dependency/main.py b/store/@{FutureOSS}/auto-dependency/main.py index a9b7088..a618f47 100644 --- a/store/@{FutureOSS}/auto-dependency/main.py +++ b/store/@{FutureOSS}/auto-dependency/main.py @@ -86,7 +86,8 @@ class SystemDependencyChecker: timeout=30 ) return result.returncode == 0 - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass return False @@ -144,7 +145,8 @@ class SystemDependencyChecker: timeout=300 ) return result.returncode == 0 - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass return False @@ -249,7 +251,8 @@ class AutoDependencyPlugin(Plugin): "manifest": manifest, "system_dependencies": system_deps }) - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() continue return results diff --git a/store/@{FutureOSS}/dashboard/main.py b/store/@{FutureOSS}/dashboard/main.py index 784884e..3511e92 100644 --- a/store/@{FutureOSS}/dashboard/main.py +++ b/store/@{FutureOSS}/dashboard/main.py @@ -89,7 +89,8 @@ class DashboardPlugin(Plugin): sent_rate = (net.bytes_sent - self._last_net[2]) / elapsed self._last_net = (now, net.bytes_recv, net.bytes_sent) return {'recv_rate': round(recv_rate, 1), 'sent_rate': round(sent_rate, 1), 'total_recv': net.bytes_recv, 'total_sent': net.bytes_sent} - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() return {'recv_rate': 0, 'sent_rate': 0, 'total_recv': 0, 'total_sent': 0} def _get_disk_io_stats(self): @@ -107,7 +108,8 @@ class DashboardPlugin(Plugin): write_rate = (disk_io.write_bytes - self._last_disk[2]) / elapsed self._last_disk = (now, disk_io.read_bytes, disk_io.write_bytes) return {'read_rate': round(read_rate, 1), 'write_rate': round(write_rate, 1)} - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() return {'read_rate': 0, 'write_rate': 0} def _get_network_latency(self) -> float: @@ -120,7 +122,8 @@ class DashboardPlugin(Plugin): elapsed = (time.time() - start) * 1000 # 毫秒 s.close() return round(elapsed, 1) - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() return 0.0 def _get_network_interfaces(self): @@ -142,7 +145,8 @@ class DashboardPlugin(Plugin): info['speed'] = stats[name].speed interfaces.append(info) return interfaces - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() return [] def _get_load_info(self): diff --git a/store/@{FutureOSS}/hot-reload/main.py b/store/@{FutureOSS}/hot-reload/main.py index a0066d1..7ec6fef 100644 --- a/store/@{FutureOSS}/hot-reload/main.py +++ b/store/@{FutureOSS}/hot-reload/main.py @@ -139,7 +139,7 @@ class HotReloadPlugin(Plugin): elif change_type == "deleted": self.unload_plugin(plugin_name) except Exception as e: - Log.error("hot-reload", f"处理变化失败: {e}") + Log.error("hot-reload", f"处理变化失败: {type(e).__name__}: {e}") def load_plugin(self, plugin_dir: Path) -> bool: """运行时加载插件""" diff --git a/store/@{FutureOSS}/http-api/events.py b/store/@{FutureOSS}/http-api/events.py index 63ad4d3..f1e531e 100644 --- a/store/@{FutureOSS}/http-api/events.py +++ b/store/@{FutureOSS}/http-api/events.py @@ -39,7 +39,8 @@ class HttpEventBus: for handler in handlers: try: handler(event) - except Exception: + except Exception as e: + import traceback; print(f"[events.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass def clear(self): diff --git a/store/@{FutureOSS}/http-tcp/server.py b/store/@{FutureOSS}/http-tcp/server.py index f519520..b523713 100644 --- a/store/@{FutureOSS}/http-tcp/server.py +++ b/store/@{FutureOSS}/http-tcp/server.py @@ -192,8 +192,9 @@ class TcpHttpServer: return None except ValueError: return None - except Exception: + except Exception as e: # 其他解析错误 + import traceback; print(f"[http-tcp] HTTP 解析失败:{type(e).__name__}: {e}"); traceback.print_exc() return None def _format_response(self, response: dict) -> bytes: diff --git a/store/@{FutureOSS}/log-terminal/main.py b/store/@{FutureOSS}/log-terminal/main.py index 68a1759..a557fd5 100644 --- a/store/@{FutureOSS}/log-terminal/main.py +++ b/store/@{FutureOSS}/log-terminal/main.py @@ -151,7 +151,8 @@ class LogTerminalPlugin(Plugin): try: if 'process' in session: session['process'].terminate() - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass self._ssh_sessions.clear() @@ -192,13 +193,14 @@ class LogTerminalPlugin(Plugin): if line: self.add_log_entry("info", "system", line) except Exception as e: - pass + import traceback + traceback.print_exc() # 等待下一次同步 time.sleep(2) except Exception as e: - Log.error("log-terminal", f"日志同步线程异常: {e}") + Log.error("log-terminal", f"日志同步线程异常: {type(e).__name__}: {e}") def add_log_entry(self, level: str, tag: str, message: str): """向日志缓冲区添加日志条目""" @@ -226,7 +228,8 @@ class LogTerminalPlugin(Plugin): try: result = subprocess.run(['which', 'sshd'], capture_output=True, text=True, timeout=5) return result.returncode == 0 - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() return False def _install_ssh(self): @@ -264,7 +267,7 @@ class LogTerminalPlugin(Plugin): Log.error("log-terminal", "未找到支持的包管理器") return False except Exception as e: - Log.error("log-terminal", f"安装 SSH 服务时出错: {e}") + Log.error("log-terminal", f"安装 SSH 服务时出错: {type(e).__name__}: {e}") return False def _start_ssh_server(self, port=8022): @@ -290,7 +293,7 @@ class LogTerminalPlugin(Plugin): Log.error("log-terminal", "SSH 服务器启动失败") return False except Exception as e: - Log.error("log-terminal", f"启动 SSH 服务器时出错: {e}") + Log.error("log-terminal", f"启动 SSH 服务器时出错: {type(e).__name__}: {e}") return False def _handle_connect_ssh(self, request): @@ -357,7 +360,7 @@ class LogTerminalPlugin(Plugin): }) ) except Exception as e: - Log.error("log-terminal", f"创建终端会话失败: {e}") + Log.error("log-terminal", f"创建终端会话失败: {type(e).__name__}: {e}") return Response( status=500, headers={"Content-Type": "application/json"}, @@ -365,7 +368,7 @@ class LogTerminalPlugin(Plugin): ) except Exception as e: - Log.error("log-terminal", f"SSH 连接请求异常: {e}") + Log.error("log-terminal", f"SSH 连接请求异常: {type(e).__name__}: {e}") return Response( status=500, headers={"Content-Type": "application/json"}, @@ -402,7 +405,8 @@ class LogTerminalPlugin(Plugin): if not line: break output += line - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass return Response( @@ -414,7 +418,7 @@ class LogTerminalPlugin(Plugin): }) ) except Exception as e: - Log.error("log-terminal", f"发送命令时出错: {e}") + Log.error("log-terminal", f"发送命令时出错: {type(e).__name__}: {e}") return Response( status=500, headers={"Content-Type": "application/json"}, @@ -431,7 +435,8 @@ class LogTerminalPlugin(Plugin): session = self._ssh_sessions[session_id] try: session['process'].terminate() - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass del self._ssh_sessions[session_id] Log.info("log-terminal", f"SSH 终端会话 #{session_id} 已断开") @@ -447,7 +452,7 @@ class LogTerminalPlugin(Plugin): body=json.dumps({'success': False, 'error': '会话不存在'}) ) except Exception as e: - Log.error("log-terminal", f"断开连接时出错: {e}") + Log.error("log-terminal", f"断开连接时出错: {type(e).__name__}: {e}") return Response( status=500, headers={"Content-Type": "application/json"}, @@ -545,7 +550,8 @@ class LogTerminalPlugin(Plugin): 'tag': 'system', 'message': line }) - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass return logs[-limit:] diff --git a/store/@{FutureOSS}/pkg-manager/main.py b/store/@{FutureOSS}/pkg-manager/main.py index 167326a..70f3022 100644 --- a/store/@{FutureOSS}/pkg-manager/main.py +++ b/store/@{FutureOSS}/pkg-manager/main.py @@ -393,7 +393,8 @@ class PkgManagerPlugin(Plugin): with _gitee_request(author_url, timeout=15) as resp: plugin_dirs = json.loads(resp.read().decode("utf-8")) break - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() if attempt < 2: time.sleep(1 + attempt) continue @@ -413,7 +414,8 @@ class PkgManagerPlugin(Plugin): with _gitee_request(manifest_url, timeout=15) as resp: manifest = json.loads(resp.read().decode("utf-8")) break - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() if attempt < 2: time.sleep(1 + attempt) continue @@ -433,7 +435,7 @@ class PkgManagerPlugin(Plugin): self._remote_cache = plugins self._cache_time = now except Exception as e: - Log.error("pkg-manager", f"获取远程插件列表失败: {e}") + Log.error("pkg-manager", f"获取远程插件列表失败: {type(e).__name__}: {e}") return plugins @@ -472,7 +474,7 @@ class PkgManagerPlugin(Plugin): Log.info("pkg-manager", f"已安装: {author}/{plugin_name}") return True except Exception as e: - Log.error("pkg-manager", f"安装失败 {plugin_name}: {e}") + Log.error("pkg-manager", f"安装失败 {plugin_name}: {type(e).__name__}: {e}") if install_dir.exists(): shutil.rmtree(install_dir) return False diff --git a/store/@{FutureOSS}/plugin-bridge/main.py b/store/@{FutureOSS}/plugin-bridge/main.py index f20ae22..ec4d130 100644 --- a/store/@{FutureOSS}/plugin-bridge/main.py +++ b/store/@{FutureOSS}/plugin-bridge/main.py @@ -30,7 +30,8 @@ class EventBus: for handler in handlers + wildcard_handlers: try: handler(event) - except Exception: + except Exception as e: + import traceback; print(f"[main.py] 错误:{type(e).__name__}:{e}"); traceback.print_exc() pass def on(self, event_type: str, handler: Callable): diff --git a/store/@{FutureOSS}/plugin-loader-pro/core/enhancer.py b/store/@{FutureOSS}/plugin-loader-pro/core/enhancer.py index 5ff45be..77d2fc2 100644 --- a/store/@{FutureOSS}/plugin-loader-pro/core/enhancer.py +++ b/store/@{FutureOSS}/plugin-loader-pro/core/enhancer.py @@ -104,7 +104,7 @@ class PluginLoaderEnhancer: try: getattr(instance, method)() except Exception as e: - ProLogger.error("safe", f"{name} {action}失败: {e}") + ProLogger.error("safe", f"{name} {action}失败: {type(e).__name__}: {e}") self._on_plugin_error(name, info, str(e)) return @@ -117,7 +117,7 @@ class PluginLoaderEnhancer: info["info"].error_count = 0 ProLogger.info("safe", f"{name} {action}成功") except Exception as e: - ProLogger.error("safe", f"{name} {action}失败: {e}") + ProLogger.error("safe", f"{name} {action}失败: {type(e).__name__}: {e}") self._on_plugin_error(name, info, str(e)) def _on_plugin_error(self, name: str, info: dict, error: str): diff --git a/store/@{FutureOSS}/plugin-loader-pro/core/manager.py b/store/@{FutureOSS}/plugin-loader-pro/core/manager.py index c53c938..f9e5e2b 100644 --- a/store/@{FutureOSS}/plugin-loader-pro/core/manager.py +++ b/store/@{FutureOSS}/plugin-loader-pro/core/manager.py @@ -128,7 +128,7 @@ class ProPluginManager: return instance except Exception as e: - ProLogger.error("loader", f"加载失败 {plugin_dir.name}: {e}") + ProLogger.error("loader", f"加载失败 {plugin_dir.name}: {type(e).__name__}: {e}") return None def init_and_start_all(self): @@ -160,7 +160,7 @@ class ProPluginManager: info["info"].status = "initialized" ProLogger.info("manager", f"已初始化: {name}") except Exception as e: - ProLogger.error("manager", f"初始化失败 {name}: {e}") + ProLogger.error("manager", f"初始化失败 {name}: {type(e).__name__}: {e}") info["info"].status = "error" info["info"].error_count += 1 info["info"].last_error = str(e) @@ -177,7 +177,7 @@ class ProPluginManager: self._health_checker.add_plugin(name, instance) ProLogger.info("manager", f"已启动: {name}") except Exception as e: - ProLogger.error("manager", f"启动失败 {name}: {e}") + ProLogger.error("manager", f"启动失败 {name}: {type(e).__name__}: {e}") info["info"].status = "error" info["info"].error_count += 1 info["info"].last_error = str(e) @@ -199,7 +199,7 @@ class ProPluginManager: info["info"].status = "stopped" ProLogger.info("manager", f"已停止: {name}") except Exception as e: - ProLogger.warn("manager", f"停止异常 {name}: {e}") + ProLogger.warn("manager", f"停止异常 {name}: {type(e).__name__}: {e}") def _on_plugin_failure(self, name: str): """插件失败回调""" @@ -249,7 +249,7 @@ class ProPluginManager: getattr(info["instance"], setter)(dep_instance) ProLogger.info("inject", f"{name} <- {actual_dep}") except Exception as e: - ProLogger.error("inject", f"注入失败 {name}.{setter}: {e}") + ProLogger.error("inject", f"注入失败 {name}.{setter}: {type(e).__name__}: {e}") def _get_ordered_plugins(self) -> list[str]: """获取插件顺序""" diff --git a/store/@{FutureOSS}/plugin-loader-pro/fallback/handler.py b/store/@{FutureOSS}/plugin-loader-pro/fallback/handler.py index eac6af8..92ddf57 100644 --- a/store/@{FutureOSS}/plugin-loader-pro/fallback/handler.py +++ b/store/@{FutureOSS}/plugin-loader-pro/fallback/handler.py @@ -29,7 +29,7 @@ class FallbackHandler: self._cache[plugin_name] = result return result except Exception as e: - ProLogger.warn("fallback", f"插件 {plugin_name} 执行失败,触发降级: {e}") + ProLogger.warn("fallback", f"插件 {plugin_name} 执行失败,触发降级: {type(e).__name__}: {e}") return self._apply_fallback(plugin_name) def _apply_fallback(self, plugin_name: str) -> Any: @@ -45,5 +45,5 @@ class FallbackHandler: try: return self.alternative_func() except Exception as e: - ProLogger.error("fallback", f"备选方案也失败了: {e}") + ProLogger.error("fallback", f"备选方案也失败了: {type(e).__name__}: {e}") return None diff --git a/store/@{FutureOSS}/plugin-loader-pro/recovery/auto_fix.py b/store/@{FutureOSS}/plugin-loader-pro/recovery/auto_fix.py index 33fcff2..fbd25f5 100644 --- a/store/@{FutureOSS}/plugin-loader-pro/recovery/auto_fix.py +++ b/store/@{FutureOSS}/plugin-loader-pro/recovery/auto_fix.py @@ -46,7 +46,7 @@ class AutoRecovery: return new_instance except Exception as e: - ProLogger.error("recovery", f"恢复插件 {name} 失败: {e}") + ProLogger.error("recovery", f"恢复插件 {name} 失败: {type(e).__name__}: {e}") self._recovery_attempts[name] = attempts + 1 return False diff --git a/store/@{FutureOSS}/plugin-loader-pro/recovery/health.py b/store/@{FutureOSS}/plugin-loader-pro/recovery/health.py index bd0e577..44b84bd 100644 --- a/store/@{FutureOSS}/plugin-loader-pro/recovery/health.py +++ b/store/@{FutureOSS}/plugin-loader-pro/recovery/health.py @@ -55,7 +55,7 @@ class HealthChecker: else: self._failure_counts[name] = 0 except Exception as e: - ProLogger.error("health", f"插件 {name} 健康检查失败: {e}") + ProLogger.error("health", f"插件 {name} 健康检查失败: {type(e).__name__}: {e}") self._on_failure(name) def _on_failure(self, name: str): diff --git a/store/@{FutureOSS}/plugin-loader/__pycache__/main.cpython-312.pyc b/store/@{FutureOSS}/plugin-loader/__pycache__/main.cpython-312.pyc index ecd1293..d140b05 100644 Binary files a/store/@{FutureOSS}/plugin-loader/__pycache__/main.cpython-312.pyc and b/store/@{FutureOSS}/plugin-loader/__pycache__/main.cpython-312.pyc differ diff --git a/store/@{FutureOSS}/plugin-loader/main.py b/store/@{FutureOSS}/plugin-loader/main.py index 6641d25..2ac5ece 100644 --- a/store/@{FutureOSS}/plugin-loader/main.py +++ b/store/@{FutureOSS}/plugin-loader/main.py @@ -200,8 +200,16 @@ class PLInjector: except SyntaxError as e: Log.error("plugin-loader", f"插件 '{plugin_name}' PL/main.py 语法错误: {e}") return False + except FileNotFoundError as e: + Log.error("plugin-loader", f"插件 '{plugin_name}' PL 文件不存在:{e}") + return False + except PermissionError as e: + Log.error("plugin-loader", f"插件 '{plugin_name}' PL 文件权限错误:{e}") + return False except Exception as e: - Log.error("plugin-loader", f"加载插件 '{plugin_name}' 的 PL 失败: {e}") + Log.error("plugin-loader", f"加载插件 '{plugin_name}' 的 PL 失败:{type(e).__name__}: {e}") + import traceback + traceback.print_exc() return False def _static_source_check(self, source: str, file_path: str): @@ -502,7 +510,7 @@ class PluginManager: try: inst = self.load(lc_dir) if inst: lifecycle_plugin = inst; self.plugins.pop("lifecycle", None) - except Exception: pass + except Exception as e: Log.warn("plugin-loader", f"lifecycle 插件加载失败:{type(e).__name__}: {e}") dep_plugin = None dep_dir = Path(store_dir) / "@{FutureOSS}" / "dependency" @@ -510,7 +518,7 @@ class PluginManager: try: inst = self.load(dep_dir) if inst: dep_plugin = inst; self._dependency_plugin = inst; self.plugins.pop("dependency", None) - except Exception: pass + except Exception as e: Log.warn("plugin-loader", f"dependency 插件加载失败:{type(e).__name__}: {e}") sig_dir = Path(store_dir) / "@{FutureOSS}" / "signature-verifier" if sig_dir.exists() and (sig_dir / "main.py").exists(): @@ -619,7 +627,7 @@ class PluginManager: def stop_all(self): for n, i in reversed(list(self.plugins.items())): try: i["instance"].stop() - except Exception: pass + except Exception as e: Log.error("plugin-loader", f"插件 {n} 停止失败:{type(e).__name__}: {e}") if self.lifecycle_plugin: self.lifecycle_plugin.stop_all() def get_info(self, name: str) -> Optional[PluginInfo]: @@ -667,4 +675,4 @@ register_plugin_type("PLInjector", PLInjector) def New(): - return PluginLoaderPlugin() \ No newline at end of file + return PluginLoaderPlugin() diff --git a/store/@{FutureOSS}/plugin-storage/main.py b/store/@{FutureOSS}/plugin-storage/main.py index b05048a..c32e4eb 100644 --- a/store/@{FutureOSS}/plugin-storage/main.py +++ b/store/@{FutureOSS}/plugin-storage/main.py @@ -124,7 +124,7 @@ class PluginStorage: with open(file_path, mode, encoding="utf-8" if mode == "r" else None) as f: return f.read() except Exception as e: - Log.error("plugin-storage", f"读取文件失败 {self.plugin_name}/{path}: {e}") + Log.error("plugin-storage", f"读取文件失败 {self.plugin_name}/{path}: {type(e).__name__}: {e}") return None def write_file(self, path: str, content: str | bytes): @@ -144,7 +144,7 @@ class PluginStorage: with open(file_path, "w", encoding="utf-8") as f: f.write(content) except Exception as e: - Log.error("plugin-storage", f"写入文件失败 {self.plugin_name}/{path}: {e}") + Log.error("plugin-storage", f"写入文件失败 {self.plugin_name}/{path}: {type(e).__name__}: {e}") def delete_file(self, path: str) -> bool: """删除插件目录内的文件""" @@ -155,7 +155,7 @@ class PluginStorage: return True return False except Exception as e: - Log.error("plugin-storage", f"删除文件失败 {self.plugin_name}/{path}: {e}") + Log.error("plugin-storage", f"删除文件失败 {self.plugin_name}/{path}: {type(e).__name__}: {e}") return False def list_files(self, prefix: str = "") -> list[str]: @@ -176,7 +176,8 @@ class PluginStorage: if f.is_file(): files.append(str(f.relative_to(self.data_dir))) return sorted(files) - except Exception: + except Exception as e: + Log.error("plugin-storage", f"列出文件失败:{type(e).__name__}: {e}") return [] def file_exists(self, path: str) -> bool: @@ -184,7 +185,8 @@ class PluginStorage: try: file_path = self._resolve_path(path) return file_path.exists() and file_path.is_file() - except Exception: + except Exception as e: + Log.error("plugin-storage", f"检查文件存在性失败:{type(e).__name__}: {e}") return False def serve_file(self, path: str) -> Response: