日志规范
日志级别
级别定义
| 级别 | 用途 | 使用场景 |
|---|---|---|
| DEBUG | 调试信息 | 详细的调试日志,开发阶段使用 |
| INFO | 一般信息 | 重要的业务流程记录 |
| WARN | 警告信息 | 潜在问题,但不影响正常运行 |
| ERROR | 错误信息 | 发生错误,但系统仍可运行 |
| FATAL | 致命错误 | 严重错误,系统可能崩溃 |
使用原则
- 生产环境关闭 DEBUG 级别
- 避免过多的日志输出
- 根据环境调整日志级别
日志格式
统一格式
[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%level] [%logger{36}] - %msg%n结构化日志
json
{
"timestamp": "2024-01-01T12:00:00.000Z",
"level": "INFO",
"thread": "main",
"logger": "com.example.service.UserService",
"message": "User login successful",
"traceId": "abc123",
"spanId": "def456",
"details": {
"userId": 123,
"ip": "192.168.1.1"
}
}日志内容规范
内容要求
- 日志内容清晰明了
- 包含必要的上下文信息
- 使用结构化的数据
避免内容
- 不要记录敏感信息(密码、Token 等)
- 避免无意义的日志
- 不要记录过大的对象
日志分类
业务日志
- 用户操作日志
- 业务流程日志
- 交易记录日志
系统日志
- 启动日志
- 配置日志
- 异常日志
日志收集与存储
收集方式
- 使用 ELK 栈进行日志收集
- 使用 Filebeat 或 Fluentd 采集日志
- 支持日志实时搜索
存储策略
- 日志按日期分片存储
- 设置合理的日志保留时间
- 定期清理过期日志
最佳实践
- 使用 SLF4J + Logback 作为日志框架
- 使用 MDC 存储请求上下文
- 避免在循环中记录日志
- 定期审查日志配置