# 日志系统使用说明
## 概述
本项目集成了完整的日志系统,基于Spring Boot + Logback实现,提供了多层次的日志记录和管理功能。
## 日志配置
### 配置文件位置
- 主配置文件:`src/main/resources/logback-spring.xml`
- 应用配置:`src/main/resources/application.yml`
### 日志文件存储位置
- 根目录:`logs/`
- 系统信息日志:`logs/sys-info.log`
- 系统错误日志:`logs/sys-error.log`
- 相机操作日志:`logs/camera.log`
- 二维码识别日志:`logs/qrcode.log`
- 定时任务日志:`logs/schedule.log`
### 日志轮转策略
- 单个文件最大大小:100MB
- 保留历史文件:30天
- 总大小限制:3GB(系统日志)、1GB(相机日志)、500MB(其他日志)
## 日志级别
- **DEBUG**: 详细的调试信息,主要在开发环境使用
- **INFO**: 一般信息,记录重要的业务流程
- **WARN**: 警告信息,不影响程序运行但需要注意
- **ERROR**: 错误信息,程序发生异常或错误
## 使用方式
### 1. 使用Lombok注解
```java
@Slf4j
@Service
public class YourService {
public void yourMethod() {
log.info("这是一条信息日志");
log.error("这是一条错误日志", exception);
}
}
```
### 2. 使用LogUtil工具类
LogUtil提供了更丰富的日志记录方法:
```java
// 相机操作日志
LogUtil.logCameraStart("camera001", "captureImage");
LogUtil.logCameraSuccess("camera001", "captureImage", 1500);
LogUtil.logCameraError("camera001", "captureImage", "连接超时");
// 二维码识别日志
LogUtil.logQRCodeStart("image.jpg", "complexDecode");
LogUtil.logQRCodeSuccess("image.jpg", "QR123456", 800);
LogUtil.logQRCodeError("image.jpg", "无法识别二维码", 1200);
// 定时任务日志
LogUtil.logScheduleTask("清理任务", "START", "开始执行清理任务");
LogUtil.logScheduleTask("清理任务", "SUCCESS", "清理完成,删除了50个文件");
// API请求日志(自动记录)
// 通过LogAspect切面自动记录所有Controller的请求和响应
// 性能监控
LogUtil.logPerformance("复杂计算", 5000, 2000); // 超过阈值会记录警告
// 业务日志
LogUtil.logBusiness("INFO", "OrderService", "订单{}创建成功", orderId);
```
### 3. 异常处理
```java
try {
// 业务逻辑
} catch (Exception e) {
LogUtil.logSystemException("UserService", "createUser", e);
// 或
log.error("用户创建失败", e);
}
```
## API接口
系统提供了日志管理的REST API:
### 1. 获取日志文件列表
```
GET /api/logs/files
```
### 2. 下载日志文件
```
GET /api/logs/download/{fileName}
```
### 3. 查看日志内容
```
GET /api/logs/view/{fileName}?lines=100
```
### 4. 清理日志文件
```
DELETE /api/logs/clear?keepDays=7
```
## 最佳实践
### 1. 日志级别使用建议
- **生产环境**: INFO级别,关闭DEBUG
- **测试环境**: DEBUG级别,便于问题排查
- **开发环境**: DEBUG级别,详细记录
### 2. 日志内容规范
- 包含关键业务标识(如用户ID、订单号、设备ID)
- 记录操作耗时,便于性能分析
- 异常日志要包含完整的堆栈信息
- 避免记录敏感信息(密码、密钥等)
### 3. 性能考虑
- 避免在循环中频繁记录日志
- 大对象日志要谨慎,可能影响性能
- 合理使用日志级别,避免不必要的字符串拼接
## 日志分析
### 1. 常用日志查询
```bash
# 查看相机错误日志
grep "ERROR" logs/camera.log
# 查看特定相机的操作记录
grep "camera001" logs/camera.log
# 查看超时的请求
grep "超过阈值" logs/sys-info.log
```
### 2. 日志监控
可以结合ELK、Graylog等日志分析工具进行实时监控和告警。
## 故障排查
### 1. 日志文件过大
- 检查日志级别设置
- 使用清理API定期清理旧日志
- 调整logback-spring.xml中的轮转参数
### 2. 日志无法记录
- 检查logs目录权限
- 确认logback配置正确
- 查看应用启动日志是否有配置错误
### 3. 性能问题
- 减少DEBUG级别日志
- 优化高频调用的日志记录
- 考虑异步日志配置
## 扩展配置
如需添加新的日志分类,在`logback-spring.xml`中添加:
```xml
${log.path}/custom.log
${log.path}/custom.%d{yyyy-MM-dd}.%i.log
50MB
15
${log.pattern}
UTF-8
```