You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.8 KiB
6.8 KiB
日志系统统一化报告
概述
本次检查发现项目中存在多种日志使用方式,为了统一管理和维护,将所有业务代码和核心代码统一为使用结构化日志系统。
检查结果
发现的问题
-
多种日志导入方式并存:
- 部分文件使用
from app.utils.log import get_enhanced_logger - 部分文件使用
from app.utils.structured_log import get_structured_logger - 测试文件中仍在使用旧的
get_logger()方法
- 部分文件使用
-
依赖层级复杂:
log.py作为包装层,增加了不必要的依赖- 不利于统一配置和管理
解决方案
统一所有代码使用 get_structured_logger() 方法,直接从 structured_log.py 导入。
修改详情
业务代码文件
| 文件路径 | 修改前 | 修改后 |
|---|---|---|
app/services/auto_discovery_adb_service.py |
get_enhanced_logger |
get_structured_logger |
app/services/device_service.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/services/ssh_service.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/services/adb_service.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/services/at_service.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/services/atx_service.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/services/plnk_service.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
核心代码文件
| 文件路径 | 修改前 | 修改后 |
|---|---|---|
app/core/websocket/adapter.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/core/websocket/client.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/core/websocket/channel.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/core/websocket/manager.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/core/device/manager.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/core/device/dispatcher.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/core/middleware/request.py |
get_enhanced_logger |
get_structured_logger |
app/core/handlers/exception_handlers.py |
get_enhanced_logger |
get_structured_logger |
app/core/config/cors.py |
get_enhanced_logger |
get_structured_logger |
app/core/app/router.py |
get_enhanced_logger |
get_structured_logger |
app/core/app/factory.py |
get_enhanced_logger |
get_structured_logger |
API端点文件
| 文件路径 | 修改前 | 修改后 |
|---|---|---|
app/api/v1/endpoints/devices.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/api/v1/endpoints/websocket.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/api/v1/endpoints/ssh.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/api/v1/endpoints/at.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/api/v1/endpoints/plnk.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
工具类文件
| 文件路径 | 修改前 | 修改后 |
|---|---|---|
app/utils/adb_utils.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/utils/serial_utils.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/utils/tcp_utils.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
app/utils/api_decorators.py |
✅ 已使用 get_structured_logger |
✅ 无需修改 |
测试文件
| 文件路径 | 修改前 | 修改后 |
|---|---|---|
test_websocket_ssl_fix.py |
get_logger |
get_enhanced_logger |
test_websocket_ssl.py |
get_logger |
get_enhanced_logger |
test_websocket_connection.py |
get_logger |
get_enhanced_logger |
test_websocket_api_logic.py |
get_logger |
get_enhanced_logger |
test_websocket_api.py |
get_logger |
get_enhanced_logger |
test_heartbeat_interval.py |
get_logger |
get_enhanced_logger |
test_api_only.py |
get_logger |
get_enhanced_logger |
统一后的日志使用方式
推荐方式(业务代码和核心代码)
from app.utils.structured_log import get_structured_logger, LogLevel
logger = get_structured_logger(__name__, LogLevel.INFO)
# 使用结构化日志
logger.info("操作成功", user_id="123", operation="login")
logger.error("操作失败", error=str(e), user_id="123")
测试代码方式
from app.utils.log import get_enhanced_logger, LogLevel
logger = get_enhanced_logger(__name__, LogLevel.DEBUG)
# 使用增强日志(内部仍使用结构化日志)
logger.info("测试信息")
logger.debug("调试信息")
向后兼容方式
from app.utils.log import get_logger
logger = get_logger("module_name")
# 使用传统日志格式
logger.info("传统日志信息")
优化效果
✅ 统一性
- 所有业务代码和核心代码使用统一的日志方式
- 便于统一配置和管理
- 减少代码维护成本
✅ 性能优化
- 减少依赖层级
- 直接使用结构化日志,避免包装层开销
✅ 功能增强
- 结构化日志提供更好的上下文信息
- 支持请求追踪和用户会话管理
- JSON格式便于日志分析和处理
✅ 向后兼容
- 保留
get_logger()方法用于旧代码 - 测试代码可以使用
get_enhanced_logger()作为过渡
验证结果
导入测试
# 结构化日志测试
python -c "from app.utils.structured_log import get_structured_logger, LogLevel; logger = get_structured_logger('test', LogLevel.DEBUG); logger.info('测试'); print('✅ 成功')"
# 业务代码测试
python -c "from app.services.device_service import DeviceService; service = DeviceService(); print('✅ 成功')"
# 核心代码测试
python -c "from app.core.websocket.adapter import WebSocketAdapter; print('✅ 成功')"
日志输出示例
{
"timestamp": "2025-08-12T09:44:59.206670",
"level": "INFO",
"message": "测试结构化日志",
"logger_name": "test",
"context": {
"request_id": null,
"user_id": null,
"session_id": null,
"module": "structured_log",
"function": "_log",
"line_number": 157,
"timestamp": "2025-08-12T09:44:59.206670",
"duration_ms": null,
"extra": {}
},
"exception": null,
"stack_trace": null
}
总结
通过本次统一化工作:
- 统一了日志使用方式:所有业务代码和核心代码都使用
get_structured_logger() - 提高了代码质量:减少了依赖层级,提高了性能
- 增强了功能:结构化日志提供更好的上下文信息和追踪能力
- 保持了兼容性:旧代码仍可使用传统日志方式
项目现在具有统一的日志管理方式,便于维护和扩展。