# 客户端消息日志记录功能 ## 功能概述 在 `StreamClientMessages` 方法中添加了自动日志记录功能,将客户端发送和接收的消息分别记录到独立的日志文件中,便于调试和分析。 ## 功能特性 ### 1. 自动日志记录 - **发送消息日志**: 记录客户端发送的所有消息到 `{clientName}_sent_messages.log` 文件 - **接收消息日志**: 记录客户端接收的所有消息到 `{clientName}_received_messages.log` 文件 - **实时记录**: 在 SSE 流处理过程中实时记录新消息 - **时间戳**: 每条消息都包含详细的时间戳信息 ### 2. 日志文件格式 ``` [2024-01-15 14:30:25.123] [TestClient] [SENT] {"message":"log_get","message_id":1} -------------------------------------------------------------------------------- [2024-01-15 14:30:25.456] [TestClient] [RECEIVED] {"notification":true,"message":"logs","data":[...]} -------------------------------------------------------------------------------- ``` ## API 接口 ### 获取客户端消息日志文件列表 ``` GET /api/message/logs ``` ### 获取客户端消息日志文件内容 ``` GET /api/message/logs/{fileName}?lines=100 ``` ### 清空客户端消息日志文件 ``` DELETE /api/message/logs?fileName={fileName} ``` ### 删除客户端消息日志文件 ``` DELETE /api/message/logs/delete?fileName={fileName} ``` ### 客户端消息流(SSE) ``` GET /api/message/{clientName}/stream ``` ### 发送消息到客户端 ``` POST /api/message/{clientName}/send Content-Type: application/json { "type": "command", "data": { "action": "test" } } ``` ## 技术实现 ### 1. 后端实现 - **日志目录**: `ClientMessageLogs/` 目录存储所有日志文件 - **文件命名**: `{clientName}_{type}_messages.log` - **编码格式**: UTF-8 编码,支持中文 - **异步写入**: 使用 `File.AppendAllTextAsync` 异步写入日志 ### 2. 前端实现 - **实时显示**: 使用 SSE 连接实时显示消息 - **文件管理**: AJAX 调用管理日志文件 - **模态框**: 使用 Bootstrap 模态框显示日志内容 - **响应式设计**: 支持不同屏幕尺寸 ### 3. 错误处理 - **文件操作异常**: 捕获并记录文件操作错误 - **网络异常**: 处理 API 调用失败情况 - **用户确认**: 危险操作(删除、清空)需要用户确认 ## 使用方法 ### 1. 启动客户端消息流 访问 `/Home/ClientMessages` 页面,系统会自动: - 建立 SSE 连接 - 开始记录发送和接收的消息 - 显示日志文件管理面板 ### 2. 查看日志文件 - 点击"刷新日志文件"按钮更新文件列表 - 点击"查看"按钮在模态框中查看日志内容 - 选择不同的行数显示选项 ### 3. 管理日志文件 - 点击"清空"按钮清空指定日志文件 - 点击"删除"按钮删除指定日志文件 - 支持批量操作(不指定文件名时操作所有文件) ## 配置说明 ### 日志目录 ```csharp private readonly string _logsDirectory = "ClientMessageLogs"; ``` ### 日志格式 ```csharp logBuilder.AppendLine($"[{timestamp}] [{clientName}] [{messageType}] {message}"); logBuilder.AppendLine(new string('-', 80)); // 分隔线 ``` ### 文件大小限制 目前没有设置文件大小限制,建议定期清理或轮转日志文件。 ## 注意事项 1. **磁盘空间**: 日志文件会持续增长,需要定期清理 2. **性能影响**: 大量消息时可能影响性能,建议监控 3. **文件权限**: 确保应用程序有写入日志目录的权限 4. **并发安全**: 多个客户端同时连接时,日志文件操作是线程安全的 ## 未来改进 1. **日志轮转**: 按大小或时间自动轮转日志文件 2. **压缩存储**: 对旧日志文件进行压缩存储 3. **日志级别**: 支持不同级别的日志记录 4. **搜索功能**: 在日志内容中添加搜索功能 5. **导出功能**: 支持导出日志文件为不同格式