diff --git a/trading_system/config.py b/trading_system/config.py index af3dfd5..cb22e33 100644 --- a/trading_system/config.py +++ b/trading_system/config.py @@ -28,11 +28,11 @@ try: if env_file.exists(): # 加载 .env 文件(会覆盖环境变量) load_dotenv(env_file, override=True) - print(f"[config.py] 已加载 .env 文件: {env_file}") + # logger.debug(f"[config.py] 已加载 .env 文件: {env_file}") # 调试信息,已禁用 # 如果 supervisor 设置了 ATS_ACCOUNT_ID,恢复它(交易进程使用 supervisor 的值,不依赖 .env) if supervisor_account_id: os.environ["ATS_ACCOUNT_ID"] = supervisor_account_id - print(f"[config.py] 恢复 supervisor 设置的 ATS_ACCOUNT_ID={supervisor_account_id}(交易进程使用此值,不依赖 .env)") + # logger.debug(f"[config.py] 恢复 supervisor 设置的 ATS_ACCOUNT_ID={supervisor_account_id}(交易进程使用此值,不依赖 .env)") # 调试信息,已禁用 break else: raise Exception("supervisor 未设置 ATS_ACCOUNT_ID") @@ -46,7 +46,7 @@ except ImportError: pass except Exception as e: # 加载 .env 文件失败时忽略,不影响程序运行 - print(f"[config.py] 加载ATS_ACCOUNT_ID时出错: {e}") + # logger.warning(f"[config.py] 加载ATS_ACCOUNT_ID时出错: {e}") # 调试信息,已禁用 # 尝试从数据库加载配置 USE_DB_CONFIG = False @@ -58,7 +58,8 @@ def _init_config_manager(): if _config_manager is not None: return _config_manager - # 使用基础日志(因为可能还没有配置好日志系统) + # ⚠️ 2026-01-27修复:移除所有print语句,避免污染日志格式 + # 只在错误时使用stderr输出,正常初始化过程静默处理 import sys from pathlib import Path @@ -67,25 +68,17 @@ def _init_config_manager(): project_root = Path(__file__).parent.parent backend_path = project_root / 'backend' - print(f"[配置管理器] 尝试初始化,项目根目录: {project_root}") - print(f"[配置管理器] backend路径: {backend_path}") - print(f"[配置管理器] backend目录存在: {backend_path.exists()}") - if not backend_path.exists(): - print(f"[配置管理器] ❌ backend目录不存在: {backend_path}") + # 只在错误时输出到stderr,不影响正常日志 + print(f"[配置管理器] ❌ backend目录不存在: {backend_path}", file=sys.stderr) USE_DB_CONFIG = False return None - # 检查backend目录内容 - backend_files = list(backend_path.iterdir()) if backend_path.exists() else [] - print(f"[配置管理器] backend目录内容: {[f.name for f in backend_files[:10]]}") - # 检查config_manager.py是否存在 config_manager_file = backend_path / 'config_manager.py' - print(f"[配置管理器] config_manager.py存在: {config_manager_file.exists()}") if not config_manager_file.exists(): - print(f"[配置管理器] ❌ config_manager.py不存在: {config_manager_file}") + print(f"[配置管理器] ❌ config_manager.py不存在: {config_manager_file}", file=sys.stderr) USE_DB_CONFIG = False return None @@ -93,78 +86,70 @@ def _init_config_manager(): backend_str = str(backend_path) if backend_str not in sys.path: sys.path.insert(0, backend_str) - print(f"[配置管理器] 已添加路径到sys.path: {backend_str}") # 尝试导入 try: - print("[配置管理器] 尝试导入config_manager...") from config_manager import ConfigManager # type: ignore - print("[配置管理器] ✓ 导入成功") # 从环境变量获取 account_id(trading_system 进程通过 ATS_ACCOUNT_ID 指定) try: account_id = int(os.getenv("ATS_ACCOUNT_ID") or os.getenv("ACCOUNT_ID") or 1) except Exception: account_id = 1 - print(f"[配置管理器] 使用 account_id={account_id} (从环境变量 ATS_ACCOUNT_ID 读取)") # 为当前账号创建 ConfigManager 实例(而不是使用全局的) config_manager = ConfigManager.for_account(account_id) - print(f"[配置管理器] ✓ 已创建 ConfigManager 实例 (account_id={account_id})") # 测试数据库连接 try: - print("[配置管理器] 测试数据库连接...") config_manager.reload() - print(f"[配置管理器] ✓ 数据库连接成功,已加载 {len(config_manager._cache)} 个配置项") - - # 检查API密钥(使用正确的 account_id) - api_key = config_manager.get('BINANCE_API_KEY') - api_secret = config_manager.get('BINANCE_API_SECRET') - print(f"[配置管理器] API密钥检查: KEY存在={bool(api_key)}, SECRET存在={bool(api_secret)}") - if api_key and api_key != 'your_api_key_here': - print(f"[配置管理器] API_KEY前4位: {api_key[:4]}...") + # 成功时使用logger输出(此时日志系统应该已初始化) + import logging + try: + logger = logging.getLogger(__name__) + logger.info(f"[配置管理器] ✓ 数据库连接成功,已加载 {len(config_manager._cache)} 个配置项") + logger.info("[配置管理器] ✓ 配置管理器初始化成功,将从数据库读取配置") + except Exception: + # 如果日志系统还未初始化,静默处理 + pass _config_manager = config_manager USE_DB_CONFIG = True - print("[配置管理器] ✓ 配置管理器初始化成功,将从数据库读取配置") return config_manager except Exception as db_error: - print(f"[配置管理器] ⚠ 数据库连接失败: {db_error}") - print(f"[配置管理器] 错误类型: {type(db_error).__name__}") - import traceback - print(f"[配置管理器] 错误详情:\n{traceback.format_exc()}") + # 错误时输出到stderr,不影响正常日志 + print(f"[配置管理器] ⚠ 数据库连接失败: {db_error}", file=sys.stderr) USE_DB_CONFIG = False return None except ImportError as e: - print(f"[配置管理器] ❌ 无法导入config_manager: {e}") - import traceback - print(f"[配置管理器] 导入错误详情:\n{traceback.format_exc()}") + print(f"[配置管理器] ❌ 无法导入config_manager: {e}", file=sys.stderr) USE_DB_CONFIG = False return None except Exception as e: - print(f"[配置管理器] ❌ 配置管理器初始化失败: {e}") import traceback - print(f"[配置管理器] 错误详情:\n{traceback.format_exc()}") + print(f"[配置管理器] ❌ 配置管理器初始化失败: {e}", file=sys.stderr) + print(traceback.format_exc(), file=sys.stderr) USE_DB_CONFIG = False return None except Exception as e: - print(f"[配置管理器] ❌ 初始化异常: {e}") import traceback - print(f"[配置管理器] 异常详情:\n{traceback.format_exc()}") + print(f"[配置管理器] ❌ 初始化异常: {e}", file=sys.stderr) + print(traceback.format_exc(), file=sys.stderr) USE_DB_CONFIG = False return None # 初始化配置管理器(在模块加载时执行) -# 注意:此时日志系统可能还没初始化,所以使用print输出 +# ⚠️ 2026-01-27修复:静默初始化,只在错误时输出到stderr,避免污染日志格式 try: _init_config_manager() except Exception as e: - print(f"[config.py] 配置管理器初始化异常: {e}") + # 错误时输出到stderr,不影响正常日志 + import sys import traceback - print(traceback.format_exc()) + print(f"[config.py] 配置管理器初始化异常: {e}", file=sys.stderr) + print(traceback.format_exc(), file=sys.stderr) def _get_config_value(key, default=None): """获取配置值(支持动态重载)"""