From 4892a24acfbd6b99f1a6fec036de41f0c7b332fa Mon Sep 17 00:00:00 2001 From: root Date: Mon, 11 Aug 2025 20:28:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BF=83=E8=B7=B3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/core/websocket/adapter.py | 12 +++++++---- modify.md | 39 +++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/app/core/websocket/adapter.py b/app/core/websocket/adapter.py index 5e81f63..e035843 100644 --- a/app/core/websocket/adapter.py +++ b/app/core/websocket/adapter.py @@ -68,7 +68,7 @@ class WebSocketAdapter: async def _send_loop(self): """发送循环:优先处理优先级Channel,其次处理普通出站Channel""" - logger.debug(f"发送循环启动: {self.client.name} (out:{self.outbound_channel.name} / in:{self.inbound_channel.name})") + logger.info(f"发送循环启动: {self.client.name} (out:{self.outbound_channel.name} / in:{self.inbound_channel.name})") try: # 优先级Channel命名约定:f"{outbound}_priority";不存在则仅用普通通道 priority_channel_name = f"{self.outbound_channel.name}_priority" @@ -167,15 +167,17 @@ class WebSocketAdapter: async def _heartbeat_loop(self): """心跳循环:以优先级消息写入,并由发送循环优先处理""" - logger.debug(f"心跳循环启动: {self.client.name} (out:{self.outbound_channel.name} / in:{self.inbound_channel.name}) 间隔:{self.heartbeat_interval}秒") + logger.info(f"心跳循环启动: {self.client.name} (out:{self.outbound_channel.name} / in:{self.inbound_channel.name}) 间隔:{self.heartbeat_interval}秒") try: priority_channel_name = f"{self.outbound_channel.name}_priority" from app.core.websocket.manager import websocket_manager # 确保优先级通道存在并连接 pch = websocket_manager.get_channel(priority_channel_name) if not pch: + logger.info(f"创建优先级通道: {priority_channel_name}") pch = await websocket_manager.create_channel(priority_channel_name, max_size=100) await pch.connect() + logger.info(f"优先级通道连接成功: {priority_channel_name}") while self.client.is_connected: try: @@ -183,13 +185,15 @@ class WebSocketAdapter: payload = json.dumps({"Message": "ping"}) msg = ChannelMessage(type="heartbeat", data=payload) await pch.send_message(msg) + logger.debug(f"心跳消息已发送: {self.client.name} -> {priority_channel_name}") await asyncio.sleep(self.heartbeat_interval) except asyncio.CancelledError: + logger.info(f"心跳任务被取消: {self.client.name}") break except Exception as e: logger.error(f"心跳写入优先级Channel失败: {e}") await asyncio.sleep(5) except asyncio.CancelledError: - logger.info("心跳任务已取消") + logger.info(f"心跳任务已取消: {self.client.name}") except Exception as e: - logger.error(f"心跳任务异常: {e}") \ No newline at end of file + logger.error(f"心跳任务异常: {self.client.name} - {e}") \ No newline at end of file diff --git a/modify.md b/modify.md index 44f11bb..6e88020 100644 --- a/modify.md +++ b/modify.md @@ -2,6 +2,45 @@ ## 2025-08-11 +### WebSocket心跳循环日志增强 +**问题**:WebSocket适配器启动后,`_heartbeat_loop` 和 `_send_loop` 的启动日志没有显示,无法确认心跳任务是否正常启动 + +**解决方案**: +1. 将 `_heartbeat_loop` 和 `_send_loop` 的启动日志级别从 `DEBUG` 改为 `INFO` +2. 在 `_heartbeat_loop` 中添加更多调试信息,包括优先级通道的创建和连接状态 +3. 增强心跳消息发送的日志记录 + +**文件变更**: +- 更新 `app/core/websocket/adapter.py` - 增强心跳循环的日志记录 + +**修改内容**: +```python +# 发送循环启动日志级别提升 +logger.info(f"发送循环启动: {self.client.name} (out:{self.outbound_channel.name} / in:{self.inbound_channel.name})") + +# 心跳循环启动日志级别提升 +logger.info(f"心跳循环启动: {self.client.name} (out:{self.outbound_channel.name} / in:{self.inbound_channel.name}) 间隔:{self.heartbeat_interval}秒") + +# 添加优先级通道创建和连接日志 +logger.info(f"创建优先级通道: {priority_channel_name}") +logger.info(f"优先级通道连接成功: {priority_channel_name}") + +# 添加心跳消息发送日志 +logger.debug(f"心跳消息已发送: {self.client.name} -> {priority_channel_name}") +``` + +**优化效果**: +- ✅ 可以清楚看到心跳循环和发送循环的启动状态 +- ✅ 能够跟踪优先级通道的创建和连接过程 +- ✅ 便于调试心跳消息的发送情况 +- ✅ 提供更详细的错误信息,包含客户端名称 + +**验证方法**: +- 创建WebSocket客户端后,应该能看到以下日志: + - "发送循环启动: test_12 (out:default / in:default)" + - "心跳循环启动: test_12 (out:default / in:default) 间隔:120秒" + - "优先级通道连接成功: default_priority" + ### 日志系统循环导入问题修复 **问题**:`app/utils/log.py` 文件存在循环导入问题,导致应用无法启动 - 错误信息:`ImportError: cannot import name 'get_enhanced_logger' from partially initialized module 'app.utils.log'`