diff --git a/trading_system/binance_client.py b/trading_system/binance_client.py index b83eb4a..29d1028 100644 --- a/trading_system/binance_client.py +++ b/trading_system/binance_client.py @@ -294,17 +294,31 @@ class BinanceClient: headers = {"X-MBX-APIKEY": self.api_key} async with aiohttp.ClientSession() as session: async with session.post(url, headers=headers, timeout=aiohttp.ClientTimeout(total=10)) as resp: + text = await resp.text() if resp.status != 200: - text = await resp.text() - logger.warning(f"create_futures_listen_key 失败 status={resp.status} body={text}") + logger.warning( + "create_futures_listen_key 失败 status=%s body=%s", + resp.status, (text[:500] if text else ""), + ) return None - data = await resp.json() + try: + data = json.loads(text) if (text and text.strip()) else {} + except Exception: + data = {} key = data.get("listenKey") if isinstance(data, dict) else None if key: logger.info("✓ 合约 User Data Stream listenKey 已创建") return key + except asyncio.TimeoutError: + logger.warning("create_futures_listen_key 失败: 请求超时(可检查该账号网络或代理)") + return None except Exception as e: - logger.warning(f"create_futures_listen_key 失败: {e}") + err_msg = getattr(e, "message", str(e)) or repr(e) + logger.warning( + "create_futures_listen_key 失败: %s - %s", + type(e).__name__, err_msg, + exc_info=logger.isEnabledFor(logging.DEBUG), + ) return None async def keepalive_futures_listen_key(self, listen_key: str): diff --git a/trading_system/ticker_24h_stream.py b/trading_system/ticker_24h_stream.py index 611d7f4..01a2299 100644 --- a/trading_system/ticker_24h_stream.py +++ b/trading_system/ticker_24h_stream.py @@ -93,7 +93,13 @@ class Ticker24hStream: except asyncio.CancelledError: break except Exception as e: - logger.warning(f"Ticker24hStream: WS 异常 {e},10s 后重连") + err_msg = getattr(e, "message", str(e)) or repr(e) + err_type = type(e).__name__ + logger.warning( + "Ticker24hStream: WS 异常 %s: %s,10s 后重连", + err_type, err_msg, + exc_info=logger.isEnabledFor(logging.DEBUG), + ) await asyncio.sleep(10) self._ws = None if not self._running: diff --git a/trading_system/user_data_stream.py b/trading_system/user_data_stream.py index 9e33a84..482e219 100644 --- a/trading_system/user_data_stream.py +++ b/trading_system/user_data_stream.py @@ -222,7 +222,13 @@ class UserDataStream: except asyncio.CancelledError: break except Exception as e: - logger.warning(f"UserDataStream: WS 异常 {e},60s 后重连") + err_msg = getattr(e, "message", str(e)) or repr(e) + err_type = type(e).__name__ + logger.warning( + "UserDataStream(account_id=%s): WS 异常 %s: %s,60s 后重连", + self.account_id, err_type, err_msg, + exc_info=logger.isEnabledFor(logging.DEBUG), + ) await asyncio.sleep(60) self._ws = None self._conn_start_time = None @@ -231,6 +237,10 @@ class UserDataStream: # 重连前重新创建 listenKey(旧 key 可能已失效或 listenKeyExpired) self._listen_key = await self.client.create_futures_listen_key() if not self._listen_key: + logger.warning( + "UserDataStream(account_id=%s): 重新创建 listenKey 失败,60s 后重试(请检查该账号 API 权限/网络/IP 白名单)", + self.account_id, + ) await asyncio.sleep(60) continue