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}
|
headers = {"X-MBX-APIKEY": self.api_key}
|
||||||
async with aiohttp.ClientSession() as session:
|
async with aiohttp.ClientSession() as session:
|
||||||
async with session.post(url, headers=headers, timeout=aiohttp.ClientTimeout(total=10)) as resp:
|
async with session.post(url, headers=headers, timeout=aiohttp.ClientTimeout(total=10)) as resp:
|
||||||
|
text = await resp.text()
|
||||||
if resp.status != 200:
|
if resp.status != 200:
|
||||||
text = await resp.text()
|
logger.warning(
|
||||||
logger.warning(f"create_futures_listen_key 失败 status={resp.status} body={text}")
|
"create_futures_listen_key 失败 status=%s body=%s",
|
||||||
|
resp.status, (text[:500] if text else ""),
|
||||||
|
)
|
||||||
return None
|
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
|
key = data.get("listenKey") if isinstance(data, dict) else None
|
||||||
if key:
|
if key:
|
||||||
logger.info("✓ 合约 User Data Stream listenKey 已创建")
|
logger.info("✓ 合约 User Data Stream listenKey 已创建")
|
||||||
return key
|
return key
|
||||||
|
except asyncio.TimeoutError:
|
||||||
|
logger.warning("create_futures_listen_key 失败: 请求超时(可检查该账号网络或代理)")
|
||||||
|
return None
|
||||||
except Exception as e:
|
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
|
return None
|
||||||
|
|
||||||
async def keepalive_futures_listen_key(self, listen_key: str):
|
async def keepalive_futures_listen_key(self, listen_key: str):
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,13 @@ class Ticker24hStream:
|
||||||
except asyncio.CancelledError:
|
except asyncio.CancelledError:
|
||||||
break
|
break
|
||||||
except Exception as e:
|
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)
|
await asyncio.sleep(10)
|
||||||
self._ws = None
|
self._ws = None
|
||||||
if not self._running:
|
if not self._running:
|
||||||
|
|
|
||||||
|
|
@ -222,7 +222,13 @@ class UserDataStream:
|
||||||
except asyncio.CancelledError:
|
except asyncio.CancelledError:
|
||||||
break
|
break
|
||||||
except Exception as e:
|
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)
|
await asyncio.sleep(60)
|
||||||
self._ws = None
|
self._ws = None
|
||||||
self._conn_start_time = None
|
self._conn_start_time = None
|
||||||
|
|
@ -231,6 +237,10 @@ class UserDataStream:
|
||||||
# 重连前重新创建 listenKey(旧 key 可能已失效或 listenKeyExpired)
|
# 重连前重新创建 listenKey(旧 key 可能已失效或 listenKeyExpired)
|
||||||
self._listen_key = await self.client.create_futures_listen_key()
|
self._listen_key = await self.client.create_futures_listen_key()
|
||||||
if not self._listen_key:
|
if not self._listen_key:
|
||||||
|
logger.warning(
|
||||||
|
"UserDataStream(account_id=%s): 重新创建 listenKey 失败,60s 后重试(请检查该账号 API 权限/网络/IP 白名单)",
|
||||||
|
self.account_id,
|
||||||
|
)
|
||||||
await asyncio.sleep(60)
|
await asyncio.sleep(60)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user