diff --git a/frontend/src/components/LogMonitor.css b/frontend/src/components/LogMonitor.css index ad2ae57..4452903 100644 --- a/frontend/src/components/LogMonitor.css +++ b/frontend/src/components/LogMonitor.css @@ -185,6 +185,7 @@ font-size: 13px; color: #111; word-break: break-word; + white-space: pre-wrap; } .msg-count { diff --git a/trading_system/binance_client.py b/trading_system/binance_client.py index 711c874..1a075df 100644 --- a/trading_system/binance_client.py +++ b/trading_system/binance_client.py @@ -555,32 +555,44 @@ class BinanceClient: except BinanceAPIException as e: error_code = e.code if hasattr(e, 'code') else None error_msg = str(e) - - logger.error("=" * 60) - logger.error(f"获取账户余额失败: {error_msg}") - + + # 合并成“单条多行日志”,避免日志/Redis 里刷屏 + lines = [ + "=" * 60, + f"获取账户余额失败: {error_msg}", + ] if error_code == -2015: - logger.error("=" * 60) - logger.error("API密钥权限错误 (错误代码: -2015)") - logger.error("可能的原因:") - logger.error("1. API密钥无效或已过期") - logger.error("2. API密钥没有合约交易权限") - logger.error("3. IP地址未添加到API密钥白名单") - logger.error("4. 测试网/生产网环境不匹配") - logger.error("=" * 60) - logger.error("解决方案:") - logger.error("1. 登录币安账户,检查API密钥状态") - logger.error("2. 确保API密钥已启用'合约交易'权限") - logger.error("3. 如果设置了IP白名单,请添加当前服务器IP") - logger.error("4. 检查 USE_TESTNET 配置是否正确") - logger.error(f" 当前配置: USE_TESTNET = {self.testnet}") - logger.error("=" * 60) + lines += [ + "=" * 60, + "API密钥权限错误 (错误代码: -2015)", + "可能的原因:", + "1. API密钥无效或已过期", + "2. API密钥没有合约交易权限", + "3. IP地址未添加到API密钥白名单", + "4. 测试网/生产网环境不匹配", + "=" * 60, + "解决方案:", + "1. 登录币安账户,检查API密钥状态", + "2. 确保API密钥已启用'合约交易'权限", + "3. 如果设置了IP白名单,请添加当前服务器IP", + "4. 检查 USE_TESTNET 配置是否正确", + f" 当前配置: USE_TESTNET = {self.testnet}", + "=" * 60, + ] elif error_code == -1022: - logger.error("签名错误,请检查API密钥和密钥是否正确") + lines += [ + f"错误代码: {error_code}", + "签名错误,请检查 API_KEY / API_SECRET 是否匹配、是否有多余空格/换行", + ] elif error_code == -2010: - logger.error("账户余额不足") + lines += [ + f"错误代码: {error_code}", + "账户余额不足", + ] else: - logger.error(f"错误代码: {error_code}") + lines += [f"错误代码: {error_code}"] + + logger.error("\n".join(lines)) return {'available': 0.0, 'total': 0.0, 'margin': 0.0}