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.

129 lines
3.8 KiB

1 month ago
# 客户端消息日志记录功能
## 功能概述
`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":[...]}
--------------------------------------------------------------------------------
```
1 month ago
## API 接口
1 month ago
1 month ago
### 获取客户端消息日志文件列表
```
GET /api/message/logs
```
### 获取客户端消息日志文件内容
```
GET /api/message/logs/{fileName}?lines=100
```
### 清空客户端消息日志文件
```
DELETE /api/message/logs?fileName={fileName}
1 month ago
```
1 month ago
### 删除客户端消息日志文件
```
DELETE /api/message/logs/delete?fileName={fileName}
1 month ago
```
1 month ago
### 客户端消息流(SSE)
```
GET /api/message/{clientName}/stream
1 month ago
```
1 month ago
### 发送消息到客户端
1 month ago
```
1 month ago
POST /api/message/{clientName}/send
Content-Type: application/json
1 month ago
1 month ago
{
"type": "command",
"data": {
"action": "test"
}
}
```
1 month ago
## 技术实现
### 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. **导出功能**: 支持导出日志文件为不同格式