Skip to content

调试与日志定位

本篇介绍 Forge 后端本地调试配置和常见日志定位方法,帮助你快速排查问题。

IDEA 远程调试

1. 启动后端调试模式

bash
cd forge-server/forge-admin-server
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

2. IDEA 配置 Remote Debug

  1. Run → Edit Configurations → + → Remote JVM Debug
  2. Host: localhost,Port: 5005
  3. 点击 Debug 按钮连接

3. 设置断点

在 IDEA 中直接点击代码行号左侧设置断点,当代码执行到断点时会自动暂停。

日志路径

日志类型路径
应用日志forge-server/forge-admin-server/logs/
SQL 日志终端输出(开发环境)
前端日志浏览器控制台 + 终端 pnpm dev 输出

日志级别调整

application-dev.yml 中调整日志级别:

yaml
logging:
  level:
    root: INFO
    com.mdframe.forge: DEBUG          # 项目代码 DEBUG
    com.baomidou.mybatisplus: DEBUG    # MyBatis-Plus SQL 日志
    org.springframework.web: INFO

关键日志输出点

模块日志内容搜索关键词
认证登录/登出/Token 刷新SaToken
SQL执行的 SQL 语句与参数PreparingParameters
租户租户 ID 过滤TenantLine
数据权限SQL 改写DataScope
全局异常未捕获异常堆栈GlobalExceptionHandler
操作日志业务操作记录OperationLog

常见问题排查

接口返回 401

检查 → SaTokenInterceptor 是否拦截了该路径
检查 → Authorization 请求头是否携带 Bearer Token
检查 → Token 是否过期

接口返回 403

检查 → @SaCheckPermission 注解的权限标识是否与数据库配置一致
检查 → 当前用户角色是否分配了对应权限

查询结果为空但数据存在

检查 → tenant_id 是否正确(数据 tenant_id = 0 不可见)
检查 → del_flag = 0 条件是否正确
检查 → 数据权限是否过滤了数据

前端请求报跨域

检查 → Vite 代理配置(vite.config.ts 中 proxy)
检查 → 后端是否配置 CORS
检查 → 请求路径是否正确(前端 /api 前缀代理到后端)

SQL 日志开启

开发环境开启 SQL 日志,查看实际执行的 SQL:

yaml
spring:
  datasource:
    dynamic:
      datasource:
        master:
          log: true  # 开启 SQL 日志

开启后控制台会输出:

==>  Preparing: SELECT id, username FROM sys_user WHERE del_flag = 0 AND tenant_id = ?
==> Parameters: 1(Long)

Forge Admin — 基于 Vue3 + Spring Boot 的企业级后台管理框架