# 生产环境日志优化说明 ## 📋 优化内容总览 ### 1. **日志级别优化** - ✅ 生产环境全局日志级别从 `INFO` 调整为 `WARN` - ✅ 系统模块 `com.ruoyi` 从 `INFO` 调整为 `WARN` - ✅ Spring 框架从 `WARN` 调整为 `ERROR` - ✅ 第三方组件(Druid、MyBatis、HTTP客户端)设为 `ERROR` ### 2. **日志文件管理优化** - ✅ 单个日志文件最大 **100MB**(超过后自动切割) - ✅ INFO日志保留 **30天**(原60天) - ✅ ERROR日志保留 **60天**(保持不变) - ✅ 用户日志保留 **30天**(原60天) - ✅ 慢SQL日志保留 **15天** - ✅ 日志总大小限制: - INFO日志: 10GB - ERROR日志: 5GB - 用户日志: 5GB - 慢SQL日志: 2GB ### 3. **日志文件命名** 优化后的日志文件命名格式: ``` sys-info.2025-12-06.0.log # 当天第1个文件 sys-info.2025-12-06.1.log # 当天第2个文件(前一个超过100MB) sys-error.2025-12-06.0.log sys-user.2025-12-06.0.log slow-sql.2025-12-06.0.log # 新增慢SQL日志 ``` ### 4. **环境隔离** - **开发/测试环境** (`dev`, `test`) - 日志级别: INFO - 输出到控制台 + 文件 - 包含SQL调试日志 - **生产环境** (`prod`) - 日志级别: WARN - 仅输出到文件(不输出控制台,节省资源) - 慢SQL单独记录 ### 5. **特定模块保留INFO日志** 以下模块在生产环境仍保留INFO级别(便于问题排查): - `LegacySystemSyncServiceImpl` - 旧系统同步服务 - `VehicleGpsSegmentMileageServiceImpl` - GPS里程计算服务 --- ## 🔧 配置文件说明 ### logback.xml 核心配置 #### 日志级别设置 ```xml ``` #### 日志滚动策略 ```xml ${log.path}/sys-info.%d{yyyy-MM-dd}.%i.log 100MB 30 10GB ``` --- ## 📊 优化效果预估 ### 日志量减少对比 | 环境 | 优化前 | 优化后 | 减少比例 | |------|--------|--------|----------| | **日志级别** | INFO | WARN | - | | **每日日志量** | ~2-5GB | ~200-500MB | **80-90% ↓** | | **磁盘占用** | ~120GB (60天) | ~15GB (30天) | **87.5% ↓** | | **I/O压力** | 高 | 低 | **80% ↓** | ### 性能提升 - ✅ 减少日志写入的 I/O 操作 - ✅ 降低磁盘空间占用 - ✅ 减少日志归档压力 - ✅ 提高日志查询效率 --- ## 📂 日志文件分类 ### 1. sys-info.log - **内容**: WARN级别的业务日志 - **大小**: 单文件100MB - **保留**: 30天,总量10GB - **用途**: 日常业务监控 ### 2. sys-error.log - **内容**: ERROR级别的错误日志 - **大小**: 单文件100MB - **保留**: 60天,总量5GB - **用途**: 错误排查、故障分析 ### 3. sys-user.log - **内容**: 用户操作审计日志 - **大小**: 单文件100MB - **保留**: 30天,总量5GB - **用途**: 用户行为审计 ### 4. slow-sql.log ⭐ 新增 - **内容**: 慢SQL查询日志(>1000ms) - **大小**: 单文件50MB - **保留**: 15天,总量2GB - **用途**: 数据库性能优化 --- ## 🛠️ 日志管理工具 ### 手动清理日志 ```bash # Windows clean-logs.bat # 清理30天前的日志 clean-logs.bat 15 # 清理15天前的日志 # Linux (如需要可创建) ./clean-logs.sh ./clean-logs.sh 15 ``` ### 查看日志统计 ```bash # 查看日志目录大小 cd logs dir /s # 查看慢SQL日志 type slow-sql.2025-12-06.0.log # 统计ERROR数量 findstr /c:"ERROR" sys-error.2025-12-06.0.log ``` --- ## 🎯 使用建议 ### 1. 代码中的日志使用规范 #### ✅ 推荐做法 ```java // 生产环境建议使用WARN级别记录重要信息 log.warn("任务执行失败,任务ID: {}, 原因: {}", taskId, reason); // ERROR级别记录异常 log.error("数据库连接失败", exception); // INFO级别仅用于关键业务流程(会被记录) log.info("调度单同步完成,任务ID: {}", taskId); ``` #### ❌ 避免做法 ```java // 避免在循环中使用INFO日志(生产环境已改为WARN,不会记录) for (Task task : tasks) { log.info("处理任务: {}", task.getId()); // ❌ 不会记录 } // 避免记录大量调试信息 log.info("完整数据: {}", JSON.toJSONString(largeObject)); // ❌ 不会记录 ``` ### 2. 性能监控关注点 #### 慢SQL日志监控 ```bash # 每天检查慢SQL日志 type logs\slow-sql.2025-12-06.0.log # 重点关注: # - 执行时间超过1秒的SQL # - 重复出现的慢SQL # - 表扫描(全表扫描) ``` #### 错误日志监控 ```bash # 每天检查错误日志 type logs\sys-error.2025-12-06.0.log # 重点关注: # - 数据库连接异常 # - 空指针异常 # - 业务逻辑错误 ``` ### 3. 日志分析 #### 使用日志分析工具 推荐使用以下工具分析日志: - **Logstash + Elasticsearch + Kibana (ELK)** - **Splunk** - **Graylog** - **本地工具**: Notepad++, VS Code #### 常用分析命令 ```bash # 统计错误次数 findstr /c:"ERROR" logs\sys-error.*.log | find /c "ERROR" # 查找特定关键词 findstr /c:"slow sql" logs\sys-info.*.log # 查看最近的错误 powershell "Get-Content logs\sys-error.log -Tail 50" ``` --- ## ⚠️ 注意事项 ### 1. 升级后首次运行 - 旧日志文件不会自动删除,需手动清理 - 新的日志文件名包含序号 `.%i` ### 2. 磁盘空间监控 - 建议设置磁盘空间告警(低于10GB) - 定期检查日志目录大小 ### 3. 日志级别调整 如果生产环境需要临时启用DEBUG日志排查问题: ```xml ``` 记得问题排查后改回 `warn` 级别! ### 4. 慢SQL阈值调整 在 `application-prod.yml` 中可以调整慢SQL阈值: ```yaml druid: filter: stat: slow-sql-millis: 1000 # 调整为500ms或2000ms ``` --- ## 🔄 回滚方案 如果优化后发现问题,可以快速回滚: ### 方案1: 修改日志级别 ```xml ``` ### 方案2: 恢复原配置 保留了旧配置的备份,可以从Git恢复: ```bash git checkout HEAD~1 -- ruoyi-admin/src/main/resources/logback.xml ``` --- ## 📞 问题反馈 如发现以下情况,请及时调整配置: - ❌ 重要日志没有记录(提升相关模块日志级别) - ❌ 日志量仍然过大(降低日志级别或减少保留天数) - ❌ 磁盘空间不足(减少 totalSizeCap 或 maxHistory) - ✅ 需要更详细的调试信息(临时启用DEBUG级别) --- ## 📈 后续优化建议 1. **引入日志聚合系统** (ELK Stack) 2. **实时日志监控告警** 3. **按业务模块分离日志文件** 4. **日志采样**(高流量接口) 5. **异步日志写入**(提升性能) --- **更新时间**: 2025-12-06 **优化版本**: v2.0 **维护人**: 开发团队