kindergarten_java/docs/LOGBACK_CONFIG.md

246 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Logback 日志配置说明
## 配置位置
- **配置文件**: `reading-platform-java/src/main/resources/logback-spring.xml`
- **日志目录**: `logs/`(应用启动时自动创建)
---
## 日志滚动策略
### 保留策略
| 配置项 | 值 | 说明 |
|--------|-----|------|
| 保留天数 | 30 天 | 自动删除 30 天前的日志 |
| 单文件大小 | 100MB | 单个日志文件最大 100MB |
| 总大小上限 | 2GB | 所有日志文件总计不超过 2GB |
### 滚动规则
1. **按天滚动**: 每天生成一个新的日志文件
2. **按大小滚动**: 当单个文件超过 100MB 时自动切分
3. **自动清理**: 超过 30 天的日志自动删除
4. **总量控制**: 当日志总量达到 2GB 时,删除最旧的日志
---
## 日志文件分类
| 日志类型 | 文件名 | 说明 | 大小上限 |
|---------|--------|------|---------|
| 主日志 | `reading-platform.log` | 业务日志、系统日志 | 2GB |
| 错误日志 | `reading-platform-error.log` | 仅记录 ERROR 级别日志 | 500MB |
| 请求日志 | `reading-platform-request.log` | 所有 API 请求日志 | 500MB |
| SQL 日志 | `reading-platform-sql.log` | 仅记录慢 SQL 和错误 SQL | 300MB |
### 日志文件命名示例
```
logs/
├── reading-platform.log # 当前主日志
├── reading-platform.2026-03-26.1.log # 按天滚动
├── reading-platform.2026-03-26.2.log # 按大小滚动
├── reading-platform-error.log # 当前错误日志
├── reading-platform-error.2026-03-26.1.log
├── reading-platform-request.log # 当前请求日志
├── reading-platform-request.2026-03-26.1.log
└── reading-platform-sql.log # 当前 SQL 日志
```
---
## 日志级别配置
### 生产环境 (prod)
| 日志类别 | 日志级别 | 输出目标 | 说明 |
|---------|---------|---------|------|
| 根日志 | INFO | FILE, ERROR_FILE | 基础日志级别 |
| 业务日志 | INFO | FILE | `com.reading.platform` 包 |
| **请求日志** | **INFO** | **REQUEST_FILE** | **所有 API 请求单独输出** |
| **SQL 日志** | **WARN** | **SQL_FILE** | **仅记录慢 SQL 和错误 SQL** |
| Spring 框架 | WARN | - | 框架日志 |
### 开发环境 (dev)
| 日志类别 | 日志级别 | 说明 |
|---------|---------|------|
| 业务日志 | DEBUG | 详细业务日志 |
| 请求日志 | INFO | 所有 API 请求单独输出 |
| SQL 日志 | DEBUG | 全量 SQL 日志 |
---
## 请求日志格式
每个 API 请求会记录以下信息:
```
===== 请求开始 =====
接口地址POST /api/v1/teacher/courses
请求方法com.reading.platform.controller.teacher.CourseController.createCourse
请求参数:{"name":"新课程","gradeId":1}
响应时间156ms
响应结果:{"code":"SUCCESS","data":123}
===== 请求结束 =====
```
异常请求:
```
===== 请求异常 =====
接口地址POST /api/v1/teacher/courses
执行时间45ms
异常信息:参数校验失败
异常类型com.reading.platform.common.exception.BusinessException
堆栈信息:...
===== 请求异常结束 =====
```
---
## SQL 日志策略
### 生产环境(推荐)
**只记录慢 SQL 和错误 SQL**,通过设置 `WARN` 级别实现:
- `DEBUG` 级别:所有 SQL开发环境
- `INFO` 级别SQL 摘要(测试环境)
- `WARN` 级别:**仅慢 SQL 和错误 SQL**(生产环境)
- `ERROR` 级别:仅错误 SQL
### 慢 SQL 配置(可选)
如需记录执行时间超过指定阈值的 SQL可在 MyBatis-Plus 配置中设置:
```yaml
# application-prod.yml
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
```
---
## 常用命令
### 查看实时请求日志
```bash
tail -f logs/reading-platform-request.log
```
### 查看实时错误日志
```bash
tail -f logs/reading-platform-error.log
```
### 查看实时 SQL 日志
```bash
tail -f logs/reading-platform-sql.log
```
### 查看指定日期的日志
```bash
cat logs/reading-platform-request.2026-03-26.1.log
```
### 搜索特定接口日志
```bash
grep "/api/v1/teacher/courses" logs/reading-platform-request.*.log
```
### 搜索错误日志
```bash
grep "ERROR" logs/reading-platform-error.log
```
### 查看日志目录大小
```bash
du -sh logs/
```
### 手动清理日志(可选)
```bash
# 删除 7 天前的日志
find logs/ -name "*.log" -mtime +7 -delete
```
---
## 配置修改
### 调整日志保留天数
修改 `logback-spring.xml`
```xml
<property name="LOG_MAX_HISTORY" value="30"/> <!-- 修改这里的数字 -->
```
### 调整单个文件大小限制
```xml
<property name="LOG_MAX_FILE_SIZE" value="100MB"/> <!-- 修改文件大小 -->
```
### 调整总日志大小上限
```xml
<property name="LOG_TOTAL_CAP" value="2GB"/> <!-- 修改总大小 -->
```
### 修改后重启服务
```bash
cd /www/wwwroot/reading-platform
./stop.sh
./start.sh
```
---
## 环境切换
### 开发环境
```bash
export SPRING_PROFILES_ACTIVE=dev
java -jar reading-platform.jar
```
### 生产环境
```bash
export SPRING_PROFILES_ACTIVE=prod
java -jar reading-platform.jar
```
---
## 注意事项
1. **请求日志独立输出**: 所有 API 请求日志输出到 `request.log`,不影响主日志
2. **SQL 日志精简**: 生产环境仅记录 WARN 和 ERROR 级别 SQL避免日志爆炸
3. **错误日志单独记录**: 所有 ERROR 级别日志输出到 `error.log`,便于问题排查
4. **日志目录权限**: 确保 `logs` 目录有写权限chmod 755
5. **磁盘空间监控**: 建议设置磁盘告警,当日志目录接近总上限时收到通知
---
## 故障排查
### 请求日志不输出
- 检查 `RequestLogAspect` 切面是否生效
- 确认日志级别配置为 `INFO`
- 检查 `additivity="false"` 是否配置
### SQL 日志不输出
- 生产环境只记录 WARN 和 ERROR 级别(慢 SQL 和错误 SQL
- 如需查看全量 SQL临时改为 `DEBUG` 级别
### 日志文件丢失
- 检查是否达到 `maxHistory`30 天)
- 检查是否达到 `totalSizeCap`(总大小上限)
---
**配置日期**: 2026-03-26
**最后更新**: 2026-03-26