Spring统一日志输出实现指南
概述
本文档详细记录了如何在Spring Boot项目中实现统一的日志输出系统,包括标准化日志格式、分环境配置、日志分类存储、接口访问日志和业务日志记录。
项目结构
1 | src/main/java/com/yourpackage/ |
实现步骤
1. 添加依赖
在 pom.xml 中添加必要依赖:
1 | <!-- AOP依赖 --> |
2. 创建日志配置文件
文件路径: src/main/resources/logback-spring.xml
1 |
|
3. 更新application.yml配置
文件路径: src/main/resources/application.yml
1 | spring: |
4. 创建统一日志工具类
文件路径: src/main/java/com/yourpackage/util/LogUtil.java
1 | package com.yourpackage.util; |
5. 创建日志拦截器
文件路径: src/main/java/com/yourpackage/interceptor/LogInterceptor.java
1 | package com.yourpackage.interceptor; |
6. 创建日志配置类
文件路径: src/main/java/com/yourpackage/config/LogConfig.java
1 | package com.yourpackage.config; |
7. 创建日志切面
文件路径: src/main/java/com/yourpackage/aspect/LogAspect.java
1 | package com.yourpackage.aspect; |
8. 创建业务日志注解
文件路径: src/main/java/com/yourpackage/annotation/LogBusiness.java
1 | package com.yourpackage.annotation; |
9. 使用示例
文件路径: src/main/java/com/yourpackage/controller/LogDemoController.java
1 | package com.yourpackage.controller; |
日志文件说明
日志文件分类
- 主日志:
logs/YourAppName.log- 应用主要日志 - 错误日志:
logs/YourAppName_error.log- 仅包含ERROR级别日志 - 业务日志:
logs/YourAppName_business.log- 业务操作日志 - SQL日志:
logs/YourAppName_sql.log- 数据库操作日志 - 访问日志:
logs/YourAppName_access.log- 接口访问日志(自动生成)
日志格式
1 | 2024-01-15 10:30:45.123 [http-nio-8080-exec-1] INFO [c.y.c.LogDemoController] - [接口访问] GET /api/test, IP: 127.0.0.1, 参数: {"id":1}, 耗时: 150ms, 结果: {"success":true} |
使用规范
1. 日志级别规范
- DEBUG: 调试信息,仅在开发环境使用
- INFO: 业务操作、接口访问、性能统计
- WARN: 业务警告、安全相关操作
- ERROR: 系统异常、业务异常
2. 日志记录场景
| 场景类型 | 记录方式 | 日志级别 |
|---|---|---|
| 接口访问 | 自动记录 | INFO |
| 业务操作 | @LogBusiness注解 | INFO |
| 异常处理 | LogUtil.logException | ERROR |
| 性能统计 | LogUtil.logPerformance | INFO |
| 用户操作 | LogUtil.logUserAction | INFO |
| 安全操作 | LogUtil.logSecurity | WARN |
3. 使用方法
基础日志记录
1 | // 获取logger |
注解方式记录
1 |
|
请求追踪
1 | // 在拦截器中自动设置 |
环境配置
开发环境 (dev)
- 日志级别: DEBUG
- 输出: 控制台 + 所有文件
- SQL日志: 开启
测试环境 (test)
- 日志级别: INFO
- 输出: 文件输出
- SQL日志: 关闭
生产环境 (prod)
- 日志级别: INFO
- 输出: 文件输出
- SQL日志: 关闭
测试验证
启动项目后,可以通过以下接口测试:
GET /log-demo/test?name=test- 测试基础日志GET /log-demo/business?userId=123- 测试业务日志注解GET /log-demo/user-action?userId=123&action=login- 测试用户操作日志
注意事项
- 日志文件大小: 单个日志文件最大100MB,保留30天
- 敏感信息: 避免在日志中记录密码、token等敏感信息
- 性能影响: 生产环境避免记录过多DEBUG日志
- JSON序列化: 复杂对象确保有默认构造函数
- 追踪ID: 所有日志自动包含追踪ID,便于链路追踪
扩展建议
- ELK集成: 可接入ELK进行日志分析和可视化
- 异步日志: 高并发场景可使用异步日志提升性能
- 日志脱敏: 对敏感信息进行脱敏处理
- 链路追踪: 集成Zipkin或SkyWalking进行分布式追踪
Comments
Comment plugin failed to load
Loading comment plugin