Files
ai-team-dashboard/dashboard/LOGGING_GUIDE.md
fang 5f14174bb9 feat: 添加 Dashboard 完整日志监控系统 v1.1.0
 新增功能
- 完整的日志记录系统(6 种日志级别)
- 日志配置功能(可通过 config.json 控制)
- 性能监控装饰器和请求日志中间件
- 7 个管理工具脚本
- 完整的文档和使用指南

🛠️ 管理工具
- start-with-log.sh: 启动脚本(带日志)
- stop-dashboard.sh: 停止脚本
- view-logs.sh: 日志查看器
- monitor-logs.sh: 实时监控工具(支持多种过滤器)
- analyze-logs.sh: 日志分析工具(自动生成报告)
- demo-logging.sh: 功能演示脚本
- test-logging-config.sh: 配置测试工具

📊 日志特性
- 支持 INFO/SUCCESS/WARN/ERROR/DEBUG/PERF 6 种级别
- 自动记录启动过程、API 请求、性能统计
- 缓存命中情况追踪
- 分步性能监控
- 智能过滤器

⚙️ 配置功能
- 可控制是否启用日志(默认:true)
- 可设置日志级别(默认:INFO)
- 可控制文件/控制台输出
- 支持动态配置(重启生效)

📚 文档
- LOGGING_GUIDE.md: 完整使用指南
- LOGGING_CONFIG.md: 配置说明文档
- LOGGING_CONFIG_QUICK.md: 快速配置指南
- 多个中文说明文档

🔒 安全
- 添加 .gitignore 排除敏感信息
- config.json(含 Token)不提交
- 日志文件不提交
- 示例配置使用占位符

 测试
- 语法检查通过
- 功能完整性验证
- 配置控制测试通过
- 文档完整性检查

详见 CHANGELOG_v1.1.0.md

Made-with: Cursor
2026-03-11 11:37:35 +08:00

384 lines
11 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Dashboard 运行日志使用指南
## 📋 概述
Dashboard 现已集成完整的运行日志系统,可以实时监控:
- ✅ 启动状态和配置加载
- 📡 API 请求详情和耗时
- ⏱️ 各组件加载性能
- 💾 缓存使用情况
- 🐳 Docker 和 Gateway 状态
- ⚠️ 错误和警告信息
**日志功能默认开启**,可以通过 `config.json` 配置来控制日志行为。
## ⚙️ 日志配置
`config.json` 中添加 `dashboard.logging` 配置:
```json
{
"dashboard": {
"port": 3800,
"logging": {
"enabled": true, // 是否启用日志默认true
"level": "INFO", // 日志级别DEBUG/INFO/WARN/ERROR默认INFO
"file": true, // 是否写入文件默认true
"console": true // 是否输出到控制台默认true
}
}
}
```
### 日志级别说明
- **DEBUG** - 最详细,包含所有调试信息(开发时使用)
- **INFO** - 一般信息,记录重要运行状态(生产推荐)⭐
- **WARN** - 警告信息,需要关注但不影响运行
- **ERROR** - 只记录错误信息
详细配置说明请查看 `LOGGING_CONFIG.md`
## 🚀 快速开始
### 1. 启动 Dashboard带日志记录
```bash
cd /Users/fang/Desktop/ai-team/dashboard
# 使用带日志的方式启动
./start-with-log.sh
```
启动成功后,你会看到类似输出:
```
✅ Dashboard 启动成功!
PID: 12345
访问: http://localhost:3800
💡 查看日志:
实时日志: tail -f logs/dashboard.log
错误日志: tail -f logs/dashboard-error.log
停止服务: ./stop-dashboard.sh
```
### 2. 实时监控运行日志
```bash
# 方式 1查看所有日志
./monitor-logs.sh
# 方式 2只看 API 请求
./monitor-logs.sh --api
# 方式 3只看性能统计
./monitor-logs.sh --perf
# 方式 4只看错误和警告
./monitor-logs.sh --error
```
### 3. 查看分析报告
```bash
# 生成完整的日志分析报告
./analyze-logs.sh
```
报告包含:
- 📊 基础统计(各级别日志数量)
- 🚀 启动信息和配置加载状态
- 📡 API 请求分布和频率
- ⏱️ 性能统计(平均/最大耗时)
- 💾 缓存命中率
- ⚠️ 错误和警告汇总
- 💡 优化建议
## 📊 日志内容详解
### 启动阶段日志
Dashboard 启动时会记录以下信息:
```
[2026-03-11 10:30:15.123] [INFO] [系统] 🦞 AI Team Dashboard 正在初始化...
[2026-03-11 10:30:15.125] [INFO] [系统] 操作系统: darwin 25.2.0
[2026-03-11 10:30:15.127] [INFO] [系统] Node.js: v20.11.0
[2026-03-11 10:30:15.129] [INFO] [系统] 工作目录: /Users/fang/Desktop/ai-team/dashboard
[2026-03-11 10:30:15.150] [INFO] [配置] 正在加载配置文件...
[2026-03-11 10:30:15.175] ⏱️ [PERF] [配置] 加载配置文件 (25ms)
[2026-03-11 10:30:15.180] ✅ [SUCCESS] [配置] 配置文件加载成功
[2026-03-11 10:30:15.200] ✅ [SUCCESS] [系统] 🦞 AI Team Dashboard 启动成功!
[2026-03-11 10:30:15.205] ✅ [SUCCESS] [系统] 访问地址: http://localhost:3800
```
### API 请求日志
每个 API 请求都会记录:
```
[2026-03-11 10:30:20.456] [INFO] [API] GET /api/monitor | {"status":200,"duration":"245ms","ip":"::1"}
[2026-03-11 10:30:25.678] [INFO] [API] GET /api/status | {"status":200,"duration":"512ms","ip":"::1"}
[2026-03-11 10:30:30.890] [INFO] [API] GET /api/bot/leader | {"status":200,"duration":"123ms","ip":"::1"}
```
### 性能监控日志
详细记录各组件的加载耗时:
```
# 监控数据获取
[2026-03-11 10:30:20.100] 🔍 [DEBUG] [监控] 开始获取监控数据
[2026-03-11 10:30:20.115] 🔍 [DEBUG] [监控] Gateway 状态获取完成 | {"duration":"15ms"}
[2026-03-11 10:30:20.123] 🔍 [DEBUG] [监控] Gateway 进程信息获取完成 | {"duration":"8ms"}
[2026-03-11 10:30:20.135] 🔍 [DEBUG] [监控] 日志获取完成 | {"count":60,"duration":"12ms"}
[2026-03-11 10:30:20.170] 🔍 [DEBUG] [监控] Docker 状态获取完成 | {"duration":"35ms"}
[2026-03-11 10:30:20.345] ⏱️ [PERF] [API] GET /api/monitor (245ms)
[2026-03-11 10:30:20.350] [INFO] [监控] 监控数据返回成功 | {"workers":2,"logs":20,"timeline":5,"gatewayStatus":"online"}
# GitHub 数据获取
[2026-03-11 10:30:25.100] ⏱️ [PERF] [GitHub] getGitHubIssues - 成功获取 15 个 Issues (234ms)
[2026-03-11 10:30:25.500] ⏱️ [PERF] [GitHub] getRepoCommits [owner/repo] - 成功获取 10 个 Commits (178ms)
# Docker 状态检查
[2026-03-11 10:30:30.100] ⏱️ [PERF] [Docker] getDockerStatus - 检查了 2 个容器 (45ms)
```
### 缓存日志
记录缓存命中情况,帮助优化性能:
```
[2026-03-11 10:30:35.123] 🔍 [DEBUG] [GitHub] Issues 使用缓存 | {"age":"5000ms"}
[2026-03-11 10:30:40.456] 🔍 [DEBUG] [GitHub] Commits 使用缓存 [owner/repo] | {"age":"10000ms"}
```
### 健康检查日志
定期检查服务状态:
```
# Gateway 健康检查通过
[2026-03-11 10:30:45.100] 🔍 [DEBUG] [Gateway] 健康检查通过 | {"latency":"15ms"}
# Gateway 健康检查失败
[2026-03-11 10:31:00.200] ⚠️ [WARN] [Gateway] 健康检查失败 | {"code":"000","latency":"30ms"}
```
### 错误和警告日志
```
# 警告
[2026-03-11 10:35:00.123] ⚠️ [WARN] [GitHub] Issues 获取失败,返回缓存 | {"repo":"owner/repo"}
[2026-03-11 10:35:05.456] ⚠️ [WARN] [Docker] Docker 状态获取失败或无容器运行
# 错误
[2026-03-11 10:40:00.789] ❌ [ERROR] [GitHub] Issues 解析失败 | {"error":"Unexpected token"}
[2026-03-11 10:40:05.012] ❌ [ERROR] [配置] 配置文件加载失败 | {"error":"ENOENT: no such file"}
```
## 🔍 常见使用场景
### 场景 1排查启动失败
```bash
# 1. 清空旧日志
> logs/dashboard.log
> logs/dashboard-error.log
# 2. 启动服务
./start-with-log.sh
# 3. 如果启动失败,脚本会自动显示错误
# 或者手动查看错误日志
./view-logs.sh -e
```
### 场景 2监控运行性能
```bash
# 打开三个终端
# 终端 1监控所有日志
./monitor-logs.sh
# 终端 2只监控性能
./monitor-logs.sh --perf
# 终端 3只监控错误
./monitor-logs.sh --error
```
### 场景 3分析慢请求
```bash
# 1. 查看分析报告
./analyze-logs.sh
# 2. 查找耗时超过 500ms 的请求
grep '\[PERF\]' logs/dashboard.log | grep -E '\([5-9][0-9]{2,}ms\)'
# 3. 统计各 API 平均耗时
grep '\[PERF\].*GET /api/monitor' logs/dashboard.log | \
grep -oE '\([0-9]+ms\)' | tr -d '()ms' | \
awk '{sum+=$1; count++} END {print "平均:", sum/count "ms"}'
```
### 场景 4检查缓存效率
```bash
# 查看缓存命中次数
grep '使用缓存' logs/dashboard.log | wc -l
# 查看缓存详情
grep '使用缓存' logs/dashboard.log | tail -20
# 查看缓存未命中(直接获取)的情况
grep '\[PERF\].*getGitHubIssues' logs/dashboard.log
```
### 场景 5监控 API 请求频率
```bash
# 实时监控 API 请求
./monitor-logs.sh --api
# 统计各 API 调用次数
grep '\[API\]' logs/dashboard.log | \
grep -oE 'GET /api/[^ ]+|POST /api/[^ ]+' | \
sort | uniq -c | sort -rn
# 查看最近 10 次请求
grep '\[API\]' logs/dashboard.log | tail -10
```
### 场景 6排查 Docker 问题
```bash
# 只看 Docker 相关日志
./monitor-logs.sh --docker
# 查看 Docker 状态检查历史
grep '\[Docker\]' logs/dashboard.log
# 查看容器数量变化
grep 'getDockerStatus - 检查了' logs/dashboard.log
```
### 场景 7检查 GitHub API 状态
```bash
# 只看 GitHub 相关日志
./monitor-logs.sh --github
# 查看 Issues 获取情况
grep 'getGitHubIssues' logs/dashboard.log
# 查看 Commits 获取情况
grep 'getRepoCommits' logs/dashboard.log
```
## 📈 性能优化指南
### 根据日志优化缓存
如果你看到大量的缓存未命中:
```bash
# 检查缓存命中率
CACHE_HITS=$(grep '使用缓存' logs/dashboard.log | wc -l)
API_CALLS=$(grep '\[PERF\].*get' logs/dashboard.log | wc -l)
echo "缓存命中率: $(echo "scale=2; $CACHE_HITS/$API_CALLS*100" | bc)%"
```
如果命中率低于 50%,可以考虑:
1. 增加 `server.js` 中的 `CACHE_TTL` 值(默认 30 秒)
2. 减少前端的刷新频率
### 根据日志优化请求
如果看到大量慢请求:
```bash
# 查找耗时超过 1 秒的请求
grep '\[PERF\]' logs/dashboard.log | grep -E '\([0-9]{4,}ms\)'
```
优化建议:
1. 减少单次请求的数据量(如 Issues limit
2. 增加缓存时间
3. 考虑异步加载非关键数据
### 根据日志优化 Docker 检查
如果 Docker 检查频繁失败:
```bash
# 查看失败率
grep 'Docker 状态获取失败' logs/dashboard.log | wc -l
```
优化建议:
1. 检查 docker-compose.yml 位置
2. 确保 Docker 服务运行
3. 减少容器数量
## 🛠️ 工具命令速查
| 命令 | 功能 | 示例 |
|------|------|------|
| `./start-with-log.sh` | 启动 Dashboard带日志 | - |
| `./stop-dashboard.sh` | 停止 Dashboard | - |
| `./monitor-logs.sh` | 实时监控所有日志 | - |
| `./monitor-logs.sh --api` | 只监控 API 请求 | - |
| `./monitor-logs.sh --perf` | 只监控性能数据 | - |
| `./monitor-logs.sh --error` | 只监控错误警告 | - |
| `./monitor-logs.sh --github` | 只监控 GitHub 相关 | - |
| `./monitor-logs.sh --docker` | 只监控 Docker 相关 | - |
| `./analyze-logs.sh` | 生成分析报告 | - |
| `./view-logs.sh -f` | 实时查看日志 | - |
| `./view-logs.sh -e` | 查看错误日志 | - |
## 📝 日志示例完整流程
从启动到处理请求的完整日志示例:
```
# 1. 系统初始化
[2026-03-11 10:30:15.123] [INFO] [系统] 🦞 AI Team Dashboard 正在初始化...
[2026-03-11 10:30:15.150] ⏱️ [PERF] [配置] 加载配置文件 (25ms)
[2026-03-11 10:30:15.200] ✅ [SUCCESS] [系统] 🦞 AI Team Dashboard 启动成功!
# 2. 第一个监控请求(无缓存)
[2026-03-11 10:30:20.100] 🔍 [DEBUG] [监控] 开始获取监控数据
[2026-03-11 10:30:20.334] ⏱️ [PERF] [GitHub] getGitHubIssues - 成功获取 15 个 Issues (234ms)
[2026-03-11 10:30:20.390] ⏱️ [PERF] [Docker] getDockerStatus - 检查了 2 个容器 (56ms)
[2026-03-11 10:30:20.456] ⏱️ [PERF] [API] GET /api/monitor (356ms)
# 3. 第二个监控请求(使用缓存,更快)
[2026-03-11 10:30:25.100] 🔍 [DEBUG] [监控] 开始获取监控数据
[2026-03-11 10:30:25.110] 🔍 [DEBUG] [GitHub] Issues 使用缓存 | {"age":"5010ms"}
[2026-03-11 10:30:25.166] ⏱️ [PERF] [Docker] getDockerStatus - 检查了 2 个容器 (56ms)
[2026-03-11 10:30:25.200] ⏱️ [PERF] [API] GET /api/monitor (100ms)
# 4. 状态总览请求
[2026-03-11 10:30:30.100] 🔍 [DEBUG] [状态] 开始获取总览数据
[2026-03-11 10:30:30.110] 🔍 [DEBUG] [GitHub] Issues 使用缓存 | {"age":"10010ms"}
[2026-03-11 10:30:30.612] ⏱️ [PERF] [API] GET /api/status (512ms)
```
## 💡 最佳实践
1. **启动时清空旧日志**:避免日志文件过大
2. **使用过滤功能**:只关注你需要的日志类型
3. **定期查看分析报告**:了解系统运行状况
4. **关注性能日志**:及时发现性能瓶颈
5. **保存重要日志**:在修复问题前备份相关日志
## 🎯 下一步
现在你可以:
1. 启动 Dashboard`./start-with-log.sh`
2. 打开浏览器访问:`http://localhost:3800`
3. 同时监控日志:`./monitor-logs.sh --api`
4. 查看性能分析:`./analyze-logs.sh`
祝使用愉快!🦞