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.
41 lines
2.5 KiB
41 lines
2.5 KiB
|
1 month ago
|
---
|
||
|
|
kind: logging_system
|
||
|
|
name: 基于 SLF4J + Logback 的注解式日志系统
|
||
|
|
category: logging_system
|
||
|
|
scope:
|
||
|
|
- '**'
|
||
|
|
source_files:
|
||
|
|
- crm-app/src/main/resources/application.yml
|
||
|
|
- crm-auth/src/main/resources/application.yml
|
||
|
|
- crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java
|
||
|
|
- crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java
|
||
|
|
---
|
||
|
|
|
||
|
|
本仓库采用 Spring Boot 内置的 SLF4J + Logback 作为统一日志框架,通过 Lombok 的 `@Slf4j` 注解在各模块中注入 logger 实例,所有业务类(auth、base、file)均遵循同一模式,无需手动声明 Logger 字段。
|
||
|
|
|
||
|
|
**日志框架与依赖**
|
||
|
|
- 日志门面:SLF4J(通过 Lombok 的 `lombok.extern.slf4j.Slf4j` 暴露 `log` 字段)
|
||
|
|
- 日志实现:Logback(Spring Boot 默认集成,由 `application.yml` 中的 `logging.pattern.console` 驱动)
|
||
|
|
- 无显式 logback.xml 配置,全部通过 application.yml 的 `logging.pattern.console` 控制输出格式
|
||
|
|
|
||
|
|
**日志级别使用约定**
|
||
|
|
- `info`:用于业务流程关键节点(如权限初始化、用户注册、孤儿身份重定向等)
|
||
|
|
- `warn`:用于可恢复异常或边界情况(如 SQL 解析失败、token 解析失败累计计数)
|
||
|
|
- `error`:用于外部调用失败、全局异常捕获等严重错误(如钉钉接口异常、全局异常处理器)
|
||
|
|
- `debug`:用于调试信息(如数据权限 SQL 注入完成、token 校验未通过路径)
|
||
|
|
|
||
|
|
**结构化字段与 TraceId 追踪**
|
||
|
|
- 控制台日志格式:`%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] %-5level %logger{36} - %msg%n`
|
||
|
|
- 通过 `%X{traceId}` 支持链路追踪,traceId 由 `crm-base` 模块的 `TraceIdFilter` 过滤器注入到 MDC 中
|
||
|
|
- 日志包含线程名、级别、logger 名称(限制 36 字符)、消息体,便于日志聚合与分析
|
||
|
|
|
||
|
|
**配置位置**
|
||
|
|
- `crm-app/src/main/resources/application.yml`:生产环境应用入口,定义统一的 console 日志格式
|
||
|
|
- `crm-auth/src/main/resources/application.yml`:认证服务独立运行时的日志格式配置
|
||
|
|
- 其他模块(crm-base、crm-file)未单独配置 logging,继承父 POM 或运行时应用的配置
|
||
|
|
|
||
|
|
**约束与规范**
|
||
|
|
- 所有需要日志的类统一使用 `@Slf4j` 注解,禁止直接 new Logger
|
||
|
|
- 日志消息中使用占位符 `{}` 而非字符串拼接,避免性能损耗
|
||
|
|
- 敏感信息(如密码、密钥)不直接打印到日志,钉钉接口异常时仅记录状态码和响应体摘要
|
||
|
|
- traceId 贯穿整个请求链路,便于分布式场景下的问题定位
|