# 生产环境日志优化说明
## 📋 优化内容总览
### 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
**维护人**: 开发团队