# BLE NUS 日志输出方案

## 可行性分析

### ✅ BLE NUS 作为日志输出是**完全可行**的

**优点**：
1. **实时查看**：通过手机 App（如 nRF Connect）实时查看日志
2. **无需硬件**：不需要连接开发板或 USB 线
3. **标准服务**：Nordic 官方支持，稳定可靠
4. **双向通信**：可以发送命令控制日志级别
5. **现场调试**：产品在现场运行时可以查看日志

**注意事项**：
1. **需要 BLE 连接**：只有连接后才能看到日志
2. **日志缓冲**：建议添加 RAM 缓冲，连接后可以读取历史日志
3. **性能影响**：日志量大时可能影响 BLE 性能
4. **日志级别控制**：生产环境建议只记录错误

## 推荐方案：BLE NUS + 日志缓冲

### 架构设计

```
日志系统
├─> Zephyr 日志系统
│   ├─> RTT 后端（开发时）
│   ├─> UART 后端（开发时）
│   └─> BLE NUS 后端（现场调试）⭐
│
├─> 日志缓冲（RAM 环形缓冲区）
│   └─> 存储最近 N 条日志（即使 BLE 未连接）
│
└─> 日志级别控制
    ├─> 开发模式：所有级别
    └─> 生产模式：只记录 ERR/WRN
```

### 实现方式

#### 方式 1：自定义日志后端（推荐）

创建自定义日志后端，将日志输出到 BLE NUS：
- 优点：集成到 Zephyr 日志系统，所有 `LOG_*` 宏自动输出
- 缺点：需要实现自定义后端

#### 方式 2：日志钩子函数

在日志输出时，同时发送到 BLE NUS：
- 优点：实现简单
- 缺点：需要修改日志系统

#### 方式 3：独立日志线程

创建独立线程，从日志缓冲区读取并发送到 BLE NUS：
- 优点：不阻塞主程序
- 缺点：需要额外的线程和缓冲

## 实施建议

### 阶段 1：基础 BLE NUS 日志（最简单）

1. 启用 BLE NUS
2. 创建自定义日志后端，输出到 NUS
3. 使用手机 App 查看日志

### 阶段 2：增强功能

1. 添加日志缓冲（RAM 环形缓冲区）
2. 添加日志级别控制
3. 支持日志命令（清除、设置级别等）

### 阶段 3：高级功能（可选）

1. Flash 日志存储（关键错误）
2. 日志压缩
3. 日志统计

## 与其他方案的对比

| 方案 | 实时性 | 历史日志 | 复杂度 | 推荐度 |
|------|--------|----------|--------|--------|
| **BLE NUS** | ✅ 实时 | ⚠️ 需要缓冲 | 中 | ⭐⭐⭐⭐⭐ |
| RTT | ✅ 实时 | ❌ 无 | 低 | ⭐⭐⭐（仅开发） |
| UART | ✅ 实时 | ❌ 无 | 低 | ⭐⭐（需要硬件） |
| Flash 存储 | ❌ 需读取 | ✅ 完整 | 高 | ⭐⭐⭐（关键错误） |
| **混合方案** | ✅ 实时 | ✅ 完整 | 高 | ⭐⭐⭐⭐⭐ |

## 推荐：BLE NUS + 日志缓冲

**最佳实践**：
1. **开发阶段**：RTT + BLE NUS
2. **现场测试**：BLE NUS + 日志缓冲
3. **生产环境**：BLE NUS（仅错误）+ Flash 存储（关键错误）

