From af5b050651b0e70fd2c4152796be65a8a931ccca Mon Sep 17 00:00:00 2001 From: En Date: Thu, 26 Mar 2026 11:25:20 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E4=BF=9D=E5=AD=98=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E7=8A=B6=E6=80=81=20before=20=E9=87=8D=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/LOGBACK_CONFIG.md | 245 ++++++++++++++++++ reading-platform-frontend/.DS_Store | Bin 8196 -> 0 bytes reading-platform-frontend/src/.DS_Store | Bin 6148 -> 0 bytes .../common/aspect/RequestLogAspect.java | 103 ++++++++ .../src/main/resources/logback-spring.xml | 184 +++++++++++++ 5 files changed, 532 insertions(+) create mode 100644 docs/LOGBACK_CONFIG.md delete mode 100644 reading-platform-frontend/.DS_Store delete mode 100644 reading-platform-frontend/src/.DS_Store create mode 100644 reading-platform-java/src/main/java/com/reading/platform/common/aspect/RequestLogAspect.java create mode 100644 reading-platform-java/src/main/resources/logback-spring.xml diff --git a/docs/LOGBACK_CONFIG.md b/docs/LOGBACK_CONFIG.md new file mode 100644 index 0000000..4bf629f --- /dev/null +++ b/docs/LOGBACK_CONFIG.md @@ -0,0 +1,245 @@ +# 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 + +``` + +### 调整单个文件大小限制 + +```xml + +``` + +### 调整总日志大小上限 + +```xml + +``` + +### 修改后重启服务 + +```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 diff --git a/reading-platform-frontend/.DS_Store b/reading-platform-frontend/.DS_Store deleted file mode 100644 index 7722f3bc215876a8858d8daebefbd4c5bcd1a790..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMJ#Q015PjH9H_yrWa*rHv;f-0a2r~;~hDxeDdD+=(LEv;7a+;>(TRRLAt zzf?ee9};%K)MMe${&aA#B>=I?W!pHf%Y>MCOg$D3X<;)il;}c@FENY@=X&D(Qjdj0 z7Y^f#592c%U!fSAo!3vSJ51_OM^!)-m{ve)_bS@xV1Qv%zd!i?IJ9MXqtWW-Ew1sa zRvce?_vKz}Z_l*%_JVfvR3vueBq~ ztMuAge!_De|B(0chb`fK6+QBNiWhi}K9$?W9)`Hf`3@~PF;=p6qd8wxxR+NifAo(& z+P%z?FWlAHBE$WmmdO4tau*}CxW^8*!+U|sH8~TJJ><-D@h021oF{xvG%xdscvLKp z1)jIRHXZePl zu5YZ|^!Kpz+Top>$3NoTJP_U&#=K*u=Ifo<8gkozIQ;q6ov$E1WOKSll)thf`T0oJ z=f4P{O%*st3M@FTOH%*eFMt1kj&`I}RRLAttO}TFW3#c&C|_Go#Y?T7uy3(T6TiZt n4dGzRaiaZ0fH?k#A?FEQB_{P)IOGbOz6h`~=%5PxRR#V4pS=p$ diff --git a/reading-platform-frontend/src/.DS_Store b/reading-platform-frontend/src/.DS_Store deleted file mode 100644 index 7d9f7df93fb0dee468050313e064b66bba60c9e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHLyGjE=6uo1jL~T-tT5fA+8VeEGgxFXK`2o#C4Q{d_@zE~$1^NXRD%kl2HWsPG zU+^DnEIs$mU}iQOEd-G;7iP}xeat<3V0SVhB2_tSmWYZ(RKQ@&FJQ_rj`J9^8RJ<6 zDqf>hYs8(NcyaH|E8rFQ=L+za87)wQV(Or0OkHYWoYKJUzWp*O&*rjKe~zv+m&`Rg@rc<^xh~He<~c`w zFgydh7WEx|w0WA2+q{U9r@@10f%&H|lbrd&9x1ca_M>aQm<8{^!(&1{bOROS`Yq|10YD zPwqc%MT1$gG8_dmGMxS^d)$B8%&;eExTf{GC_8D=<|GsC>0nt>BT&-a7Vhyw?U8`xtDTmuQp{ kOlCWl3*L(Pe+4nb0=@u-1{00&!2AyZk-<-1fj?E?6GYp?eE + + + + + + + + + + + + + + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + UTF-8 + + + + + + ${LOG_HOME}/${APP_NAME}.log + + + + ${LOG_HOME}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log + + + ${LOG_MAX_HISTORY} + + + + ${LOG_MAX_FILE_SIZE} + + + + ${LOG_TOTAL_CAP} + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + UTF-8 + + + + + + ${LOG_HOME}/${APP_NAME}-error.log + + + + ERROR + ACCEPT + DENY + + + + ${LOG_HOME}/${APP_NAME}-error.%d{yyyy-MM-dd}.%i.log + ${LOG_MAX_HISTORY} + + ${LOG_MAX_FILE_SIZE} + + 500MB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + UTF-8 + + + + + + ${LOG_HOME}/${APP_NAME}-request.log + + + ${LOG_HOME}/${APP_NAME}-request.%d{yyyy-MM-dd}.%i.log + ${LOG_MAX_HISTORY} + + ${LOG_MAX_FILE_SIZE} + + 500MB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + UTF-8 + + + + + + ${LOG_HOME}/${APP_NAME}-sql.log + + + ${LOG_HOME}/${APP_NAME}-sql.%d{yyyy-MM-dd}.%i.log + ${LOG_MAX_HISTORY} + + ${LOG_MAX_FILE_SIZE} + + 300MB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + UTF-8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +