This commit is contained in:
薇薇安 2026-01-27 16:03:10 +08:00
parent 8667c07134
commit 4c5d040746

View File

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