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.
 
 
 

3.9 KiB

客户端消息日志记录功能

功能概述

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":[...]}
--------------------------------------------------------------------------------

3. 日志文件管理 API

获取日志文件列表

GET /api/websocket/clients/message-logs

获取日志文件内容

GET /api/websocket/clients/message-logs/{fileName}?lines=100

清空日志文件

DELETE /api/websocket/clients/message-logs?fileName={fileName}

删除日志文件

DELETE /api/websocket/clients/message-logs/delete?fileName={fileName}

4. Web 界面管理

ClientMessages.cshtml 页面中添加了日志文件管理面板,提供:

  • 日志文件列表显示
  • 文件大小和修改时间信息
  • 查看日志内容(支持不同行数显示)
  • 清空和删除日志文件功能
  • 实时刷新日志文件列表

技术实现

1. 后端实现

  • 日志目录: ClientMessageLogs/ 目录存储所有日志文件
  • 文件命名: {clientName}_{type}_messages.log
  • 编码格式: UTF-8 编码,支持中文
  • 异步写入: 使用 File.AppendAllTextAsync 异步写入日志

2. 前端实现

  • 实时显示: 使用 SSE 连接实时显示消息
  • 文件管理: AJAX 调用管理日志文件
  • 模态框: 使用 Bootstrap 模态框显示日志内容
  • 响应式设计: 支持不同屏幕尺寸

3. 错误处理

  • 文件操作异常: 捕获并记录文件操作错误
  • 网络异常: 处理 API 调用失败情况
  • 用户确认: 危险操作(删除、清空)需要用户确认

使用方法

1. 启动客户端消息流

访问 /Home/ClientMessages 页面,系统会自动:

  • 建立 SSE 连接
  • 开始记录发送和接收的消息
  • 显示日志文件管理面板

2. 查看日志文件

  • 点击"刷新日志文件"按钮更新文件列表
  • 点击"查看"按钮在模态框中查看日志内容
  • 选择不同的行数显示选项

3. 管理日志文件

  • 点击"清空"按钮清空指定日志文件
  • 点击"删除"按钮删除指定日志文件
  • 支持批量操作(不指定文件名时操作所有文件)

配置说明

日志目录

private readonly string _logsDirectory = "ClientMessageLogs";

日志格式

logBuilder.AppendLine($"[{timestamp}] [{clientName}] [{messageType}] {message}");
logBuilder.AppendLine(new string('-', 80)); // 分隔线

文件大小限制

目前没有设置文件大小限制,建议定期清理或轮转日志文件。

注意事项

  1. 磁盘空间: 日志文件会持续增长,需要定期清理
  2. 性能影响: 大量消息时可能影响性能,建议监控
  3. 文件权限: 确保应用程序有写入日志目录的权限
  4. 并发安全: 多个客户端同时连接时,日志文件操作是线程安全的

未来改进

  1. 日志轮转: 按大小或时间自动轮转日志文件
  2. 压缩存储: 对旧日志文件进行压缩存储
  3. 日志级别: 支持不同级别的日志记录
  4. 搜索功能: 在日志内容中添加搜索功能
  5. 导出功能: 支持导出日志文件为不同格式