You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lxCameraApi/LOG_SYSTEM.md

4.8 KiB

日志系统使用说明

概述

本项目集成了完整的日志系统基于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注解

@Slf4j
@Service
public class YourService {
    public void yourMethod() {
        log.info("这是一条信息日志");
        log.error("这是一条错误日志", exception);
    }
}

2. 使用LogUtil工具类

LogUtil提供了更丰富的日志记录方法

// 相机操作日志
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. 异常处理

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. 常用日志查询

# 查看相机错误日志
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中添加:

<!-- 新的日志分类 -->
<appender name="custom_log" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/custom.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>${log.path}/custom.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <maxFileSize>50MB</maxFileSize>
        <maxHistory>15</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>${log.pattern}</pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>

<logger name="com.example.lxcameraapi.your.package" level="INFO" additivity="false">
    <appender-ref ref="custom_log"/>
    <appender-ref ref="console"/>
</logger>