From 8b9fe2dc7196c7a5158ff547e3d4bcfc35b301b7 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 11 Aug 2025 14:15:38 +0800 Subject: [PATCH] =?UTF-8?q?log=20=E4=BF=AE=E5=A4=8D=E5=8F=AA=E4=BF=9D?= =?UTF-8?q?=E7=95=99=20error=20=E8=B7=9F=E6=AD=A3=E5=B8=B8=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/v1/endpoints/at.py | 4 +- app/api/v1/endpoints/devices.py | 4 +- app/api/v1/endpoints/plnk.py | 4 +- app/api/v1/endpoints/ssh.py | 4 +- app/api/v1/endpoints/websocket.py | 4 +- app/core/device/dispatcher.py | 4 +- app/core/device/manager.py | 4 +- app/core/websocket/adapter.py | 4 +- app/core/websocket/channel.py | 4 +- app/core/websocket/client.py | 4 +- app/core/websocket/manager.py | 4 +- app/services/adb_service.py | 4 +- app/services/at_service.py | 4 +- app/services/atx_service.py | 4 +- app/services/device_service.py | 4 +- app/services/plnk_service.py | 4 +- app/services/ssh_service.py | 4 +- app/utils/adb_utils.py | 4 +- app/utils/api_decorators.py | 4 +- app/utils/serial_utils.py | 4 +- app/utils/tcp_utils.py | 4 +- modify.md | 63 ++++++++++++++++++++++++++++++- 22 files changed, 104 insertions(+), 43 deletions(-) diff --git a/app/api/v1/endpoints/at.py b/app/api/v1/endpoints/at.py index 811d6c3..f2f2a34 100644 --- a/app/api/v1/endpoints/at.py +++ b/app/api/v1/endpoints/at.py @@ -2,9 +2,9 @@ from fastapi import APIRouter, HTTPException, status from app.core.device.manager import device_manager from app.core.device.dispatcher import device_dispatcher from app.schemas.at import ATCommandRequest, ATCommandResponse -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) router = APIRouter() diff --git a/app/api/v1/endpoints/devices.py b/app/api/v1/endpoints/devices.py index ae96f60..fbf4ef2 100644 --- a/app/api/v1/endpoints/devices.py +++ b/app/api/v1/endpoints/devices.py @@ -10,9 +10,9 @@ from app.schemas.adb import ( ClickRequest, InputRequest, ScreenshotResponse, InstallRequest, InstallResponse, LogcatRequest, LogcatResponse ) -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) router = APIRouter() diff --git a/app/api/v1/endpoints/plnk.py b/app/api/v1/endpoints/plnk.py index c272c3d..48bed33 100644 --- a/app/api/v1/endpoints/plnk.py +++ b/app/api/v1/endpoints/plnk.py @@ -2,9 +2,9 @@ from fastapi import APIRouter, HTTPException, status from app.core.device.manager import device_manager from app.core.device.dispatcher import device_dispatcher from app.schemas.plnk import PLNKRequest, PLNKResponse -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) router = APIRouter() diff --git a/app/api/v1/endpoints/ssh.py b/app/api/v1/endpoints/ssh.py index 81c7517..6a613e5 100644 --- a/app/api/v1/endpoints/ssh.py +++ b/app/api/v1/endpoints/ssh.py @@ -2,9 +2,9 @@ from fastapi import APIRouter, HTTPException, status from app.core.device.manager import device_manager from app.core.device.dispatcher import device_dispatcher from app.schemas.ssh import SSHExecRequest, SSHExecResponse -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) router = APIRouter() diff --git a/app/api/v1/endpoints/websocket.py b/app/api/v1/endpoints/websocket.py index 19fc7e7..38bd479 100644 --- a/app/api/v1/endpoints/websocket.py +++ b/app/api/v1/endpoints/websocket.py @@ -11,9 +11,9 @@ from app.schemas.websocket import ( ) from app.core.config.settings import config from app.utils.api_decorators import handle_api_errors -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) router = APIRouter() diff --git a/app/core/device/dispatcher.py b/app/core/device/dispatcher.py index 5ce04cd..f6ad343 100644 --- a/app/core/device/dispatcher.py +++ b/app/core/device/dispatcher.py @@ -9,9 +9,9 @@ from app.services.ssh_service import SshService from app.services.at_service import AtService from app.services.plnk_service import PlnkService from app.services.atx_service import AtxService -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) class DeviceDispatcher: """设备分发器 - 根据设备协议类型调用相应的服务""" diff --git a/app/core/device/manager.py b/app/core/device/manager.py index 0f3a825..19e2ec9 100644 --- a/app/core/device/manager.py +++ b/app/core/device/manager.py @@ -7,9 +7,9 @@ import asyncio from enum import Enum from app.core.config import ProtocolType, DeviceStatus from app.schemas.device import Device, DeviceCreate, DeviceUpdate -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) class DeviceSource(Enum): """设备来源枚举""" diff --git a/app/core/websocket/adapter.py b/app/core/websocket/adapter.py index f9c4dcd..cc5127e 100644 --- a/app/core/websocket/adapter.py +++ b/app/core/websocket/adapter.py @@ -8,10 +8,10 @@ import json from datetime import datetime from app.core.websocket.client import WebSocketClient from app.core.websocket.channel import WebSocketChannel, ChannelMessage -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel from datetime import timedelta -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) class WebSocketAdapter: """WebSocket适配器 - 连接WebSocket客户端和Channel diff --git a/app/core/websocket/channel.py b/app/core/websocket/channel.py index 19361d3..7b91385 100644 --- a/app/core/websocket/channel.py +++ b/app/core/websocket/channel.py @@ -7,9 +7,9 @@ from typing import Any, Optional, Callable, Dict, List from enum import Enum from dataclasses import dataclass from datetime import datetime -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) class ChannelState(Enum): """Channel状态枚举""" diff --git a/app/core/websocket/client.py b/app/core/websocket/client.py index 7af9ad8..2520211 100644 --- a/app/core/websocket/client.py +++ b/app/core/websocket/client.py @@ -9,9 +9,9 @@ from typing import Any, Optional, Dict, Callable from enum import Enum from datetime import datetime import websockets -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) class WebSocketClientState(Enum): """WebSocket客户端状态枚举""" diff --git a/app/core/websocket/manager.py b/app/core/websocket/manager.py index 47c78ae..bb6601b 100644 --- a/app/core/websocket/manager.py +++ b/app/core/websocket/manager.py @@ -8,9 +8,9 @@ from datetime import datetime from app.core.websocket.client import WebSocketClient from app.core.websocket.channel import WebSocketChannel from app.core.websocket.adapter import WebSocketAdapter -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) class WebSocketManager: """WebSocket管理器 - 统一管理多个WebSocket客户端和Channel的连接""" diff --git a/app/services/adb_service.py b/app/services/adb_service.py index b7a3acb..53be6d8 100644 --- a/app/services/adb_service.py +++ b/app/services/adb_service.py @@ -10,9 +10,9 @@ from app.schemas.adb import ( ClickRequest, InputRequest, ScreenshotResponse, InstallRequest, InstallResponse, LogcatRequest, LogcatResponse ) -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) class AdbService: """ADB服务类""" diff --git a/app/services/at_service.py b/app/services/at_service.py index e5fb7bf..f208ea4 100644 --- a/app/services/at_service.py +++ b/app/services/at_service.py @@ -7,9 +7,9 @@ import serial from typing import Optional from app.core.device.manager import device_manager from app.schemas.at import ATCommandRequest, ATCommandResponse, SerialConnectionInfo -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) class AtService: """AT服务类""" diff --git a/app/services/atx_service.py b/app/services/atx_service.py index 8dfb0e8..a4bef77 100644 --- a/app/services/atx_service.py +++ b/app/services/atx_service.py @@ -7,9 +7,9 @@ from typing import Optional, List import uiautomator2 as u2 from app.core.device.manager import device_manager from app.schemas.adb import ClickRequest, InputRequest, ScreenshotResponse -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) class AtxService: """ATX服务类""" diff --git a/app/services/device_service.py b/app/services/device_service.py index 339cc46..a3eed4c 100644 --- a/app/services/device_service.py +++ b/app/services/device_service.py @@ -6,9 +6,9 @@ from typing import Dict, List, Optional, Any, Union from app.core.device.manager import device_manager, DeviceSource from app.core.device.dispatcher import device_dispatcher from app.services.auto_discovery_adb_service import AutoDiscoveryAdbService -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) class DeviceService: """设备管理服务""" diff --git a/app/services/plnk_service.py b/app/services/plnk_service.py index b23faf4..9b2ef74 100644 --- a/app/services/plnk_service.py +++ b/app/services/plnk_service.py @@ -8,9 +8,9 @@ import serial from typing import Optional, Dict, Any from app.core.device.manager import device_manager from app.schemas.plnk import PLNKRequest, PLNKResponse, TCPConnectionInfo, PLNKConnectionInfo -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) class PlnkService: """PLNK服务类""" diff --git a/app/services/ssh_service.py b/app/services/ssh_service.py index 5f2922a..6fdac56 100644 --- a/app/services/ssh_service.py +++ b/app/services/ssh_service.py @@ -4,9 +4,9 @@ from typing import Optional import paramiko from app.core.device.manager import device_manager from app.schemas.ssh import SSHExecRequest, SSHExecResponse, SSHConnectionInfo -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) class SshService: """SSH服务类 - 实现SSH协议相关操作""" diff --git a/app/utils/adb_utils.py b/app/utils/adb_utils.py index 75add77..c9ee733 100644 --- a/app/utils/adb_utils.py +++ b/app/utils/adb_utils.py @@ -4,9 +4,9 @@ ADB工具模块 - 提供常用的ADB操作函数 import re import subprocess from typing import List, Optional, Dict, Any -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) class AdbUtils: diff --git a/app/utils/api_decorators.py b/app/utils/api_decorators.py index e4466d1..86b978b 100644 --- a/app/utils/api_decorators.py +++ b/app/utils/api_decorators.py @@ -4,9 +4,9 @@ API装饰器工具 import functools from typing import Callable, Any from fastapi import HTTPException, status -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) def handle_api_errors(func: Callable) -> Callable: """API错误处理装饰器""" diff --git a/app/utils/serial_utils.py b/app/utils/serial_utils.py index 9d05971..a806b7c 100644 --- a/app/utils/serial_utils.py +++ b/app/utils/serial_utils.py @@ -1,9 +1,9 @@ import serial import serial.tools.list_ports from typing import List, Dict, Any -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) class SerialUtils: """串口工具类""" diff --git a/app/utils/tcp_utils.py b/app/utils/tcp_utils.py index 25bfe13..fc15419 100644 --- a/app/utils/tcp_utils.py +++ b/app/utils/tcp_utils.py @@ -1,9 +1,9 @@ import socket import time from typing import Dict, Any, Optional -from app.utils.log import get_logger +from app.utils.structured_log import get_structured_logger, LogLevel -logger = get_logger(__name__) +logger = get_structured_logger(__name__, LogLevel.INFO) class TCPUtils: """TCP工具类""" diff --git a/modify.md b/modify.md index 37c7264..8305d08 100644 --- a/modify.md +++ b/modify.md @@ -673,4 +673,65 @@ WebSocket服务器 ↔ WebSocketClient ↔ WebSocketAdapter ↔ WebSocketChannel - 适配器被停止(调用 `adapter.stop()`) - 任务被取消(`asyncio.CancelledError`) -**结论**: `_heartbeat_loop` 在适配器创建并启动后立即开始运行,按照指定的心跳间隔定期发送心跳消息,直到客户端断开或适配器停止。 \ No newline at end of file +**结论**: `_heartbeat_loop` 在适配器创建并启动后立即开始运行,按照指定的心跳间隔定期发送心跳消息,直到客户端断开或适配器停止。 + +### 日志系统统一更新 + +**问题**: 项目中大量文件仍在使用旧的 `get_logger(__name__)` 方式,需要统一更新为新的结构化日志系统 + +**解决方案**: 将所有核心模块的日志导入方式从 `get_logger` 更新为 `get_structured_logger` + +**更新的文件列表**: + +#### 核心模块 (app/core/) +- `app/core/websocket/adapter.py` - WebSocket适配器 +- `app/core/websocket/manager.py` - WebSocket管理器 +- `app/core/websocket/client.py` - WebSocket客户端 +- `app/core/websocket/channel.py` - WebSocket通道 +- `app/core/device/manager.py` - 设备管理器 +- `app/core/device/dispatcher.py` - 设备分发器 + +#### API端点 (app/api/v1/endpoints/) +- `app/api/v1/endpoints/websocket.py` - WebSocket API +- `app/api/v1/endpoints/devices.py` - 设备API +- `app/api/v1/endpoints/at.py` - AT命令API +- `app/api/v1/endpoints/ssh.py` - SSH API +- `app/api/v1/endpoints/plnk.py` - PLNK API + +#### 服务层 (app/services/) +- `app/services/adb_service.py` - ADB服务 +- `app/services/device_service.py` - 设备服务 +- `app/services/at_service.py` - AT服务 +- `app/services/atx_service.py` - ATX服务 +- `app/services/plnk_service.py` - PLNK服务 +- `app/services/ssh_service.py` - SSH服务 + +#### 工具类 (app/utils/) +- `app/utils/api_decorators.py` - API装饰器 +- `app/utils/adb_utils.py` - ADB工具 +- `app/utils/tcp_utils.py` - TCP工具 +- `app/utils/serial_utils.py` - 串口工具 + +**更新内容**: +```python +# 旧方式 +from app.utils.log import get_logger +logger = get_logger(__name__) + +# 新方式 +from app.utils.structured_log import get_structured_logger, LogLevel +logger = get_structured_logger(__name__, LogLevel.INFO) +``` + +**优势**: +- ✅ 统一使用结构化日志系统 +- ✅ 日志文件简化管理(只有 `app.log` 和 `error.log` 两个文件) +- ✅ 异常日志包含完整堆栈跟踪 +- ✅ 正常日志不包含堆栈跟踪,减少文件大小 +- ✅ 按日志级别自动分流 +- ✅ 保持控制台输出功能 + +**注意事项**: +- 测试文件(test_*.py)暂未更新,因为它们可能不需要结构化日志 +- 所有核心业务逻辑模块已更新完成 +- 新的日志系统提供更好的日志管理和分析能力 \ No newline at end of file