fix(binance_client, ticker_stream, user_data_stream): 增强异常处理和日志记录
在 `binance_client`、`ticker_24h_stream` 和 `user_data_stream` 中优化了异常处理逻辑,确保在发生错误时记录详细的错误类型和信息。更新了日志格式,以便于后续排查和监控。同时,增加了对请求超时的处理,提升了系统的稳定性和可追溯性。
This commit is contained in:
parent
ec5c76c546
commit
dfbdfee596
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user