fix(qmt): 消除静默异常处理并统一日志系统

- 修复6处静默except块(撤单、错误回调、线程停止、健康检查等)
- 统一入口模块使用logging替代print
- 增强交易日志可追踪性
- 添加完整堆栈跟踪日志
This commit is contained in:
2026-01-27 01:21:22 +08:00
parent ec41783155
commit 086af75b3e
5 changed files with 178 additions and 37 deletions

View File

@@ -1,38 +1,73 @@
# coding:utf-8
import threading
import sys
import os
import logging
import datetime
import uvicorn
from .qmt_engine import QMTEngine
from .api_server import create_api_server
def setup_logger():
"""配置日志系统"""
log_dir = "logs"
if not os.path.exists(log_dir):
os.makedirs(log_dir)
log_file = os.path.join(log_dir, f"{datetime.date.today().strftime('%Y-%m-%d')}.log")
logger = logging.getLogger("QMT_Main")
logger.setLevel(logging.INFO)
formatter = logging.Formatter(
'[%(asctime)s] [%(levelname)s] [%(filename)s:%(lineno)d] %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
file_handler = logging.FileHandler(log_file, mode='a', encoding='utf-8')
file_handler.setFormatter(formatter)
stream_handler = logging.StreamHandler(sys.stdout)
stream_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
return logger
def main():
"""主函数 - 启动QMT交易引擎和API服务器"""
print(">>> 系统正在启动...")
logger = setup_logger()
logger.info("="*50)
logger.info(">>> QMT交易系统启动中...")
logger.info("="*50)
# 创建QMT引擎实例
engine = QMTEngine()
logger.info("QMT引擎实例创建成功")
try:
# 初始化引擎
engine.initialize('config.json')
print("✅ QMT引擎初始化成功")
logger.info("✅ QMT引擎初始化成功")
except Exception as e:
print(f"❌ QMT引擎初始化失败: {e}")
logger.error(f"❌ QMT引擎初始化失败: {str(e)}", exc_info=True)
sys.exit(1)
# 启动交易线程
trading_thread = threading.Thread(target=engine.run_trading_loop, daemon=True)
trading_thread.start()
print("✅ 交易线程启动成功")
logger.info("✅ 交易线程启动成功")
# 创建API服务器
app = create_api_server(engine)
print("✅ API服务器创建成功")
logger.info("✅ API服务器创建成功")
# 启动Web服务
print(">>> Web服务启动: http://localhost:8001")
logger.info(">>> Web服务启动: http://localhost:8001")
try:
uvicorn.run(
app,
@@ -42,9 +77,13 @@ def main():
access_log=False
)
except KeyboardInterrupt:
print("\n>>> 正在关闭系统...")
logger.info(">>> 正在关闭系统...")
engine.stop()
print(">>> 系统已关闭")
logger.info(">>> 系统已关闭")
except Exception as e:
logger.error(f">>> 系统异常: {str(e)}", exc_info=True)
engine.stop()
logger.info(">>> 系统已关闭")
if __name__ == '__main__':