notfff 97c30b28d2 test: 更新单元测试数据清理脚本 6 månader sedan
..
AddWoodRecipes.php 6e2bf76fa8 1 7 månader sedan
AskAndEchoCommand.php f27e6f17a3 新增后台管理系统测试报告和自定义问答命令 7 månader sedan
CheckMenuValidity.php a29322c005 feat(ucore): 增加 generate-apptree 命令 7 månader sedan
CheckSpecificMenus.php a29322c005 feat(ucore): 增加 generate-apptree 命令 7 månader sedan
CheckTempDataCommand.php 77970c0912 修复房屋升级后土地同步问题:新土地现在能正确进入暂存区 6 månader sedan
CreateSampleDismantleRules.php 6e2bf76fa8 1 7 månader sedan
CreateSampleRecipes.php 6e2bf76fa8 1 7 månader sedan
DebugSeedMapping.php 6e2bf76fa8 1 7 månader sedan
DisabledBaseMigrateCommand.php a29322c005 feat(ucore): 增加 generate-apptree 命令 7 månader sedan
DisabledMigrateCommand.php a29322c005 feat(ucore): 增加 generate-apptree 命令 7 månader sedan
GenerateProtoRouteCommand.php 693477b517 feat(GenerateModelAnnotation): 支持自定义Casts类型 7 månader sedan
GetMenuById.php a29322c005 feat(ucore): 增加 generate-apptree 命令 7 månader sedan
InsertShopPurchaseLimitMenu.php 6e2bf76fa8 1 7 månader sedan
InsertTeamAdminMenu.php 693477b517 feat(GenerateModelAnnotation): 支持自定义Casts类型 7 månader sedan
README_ReproduceError.md 632ba4b5d9 新增错误复现命令:通过请求日志记录复现错误请求用于调试 7 månader sedan
ReproduceErrorCommand.php 5cd80e8e0b fix(mex): 修复挂单阶段价格验证错误 7 månader sedan
TestHouseUpgradeCommand.php 77970c0912 修复房屋升级后土地同步问题:新土地现在能正确进入暂存区 6 månader sedan
TestSizeRotatingLog.php 6e2bf76fa8 1 7 månader sedan
UpdateAdminMenuEmoji.php 693477b517 feat(GenerateModelAnnotation): 支持自定义Casts类型 7 månader sedan
UpdateChestAdminMenu.php 6e2bf76fa8 1 7 månader sedan
VerifyFundCurrencyId.php bcbd4abfd0 Fund模块币种ID概念修复 7 månader sedan
VerifyFundDecimal.php bcbd4abfd0 Fund模块币种ID概念修复 7 månader sedan

README_ReproduceError.md

错误复现命令 (ReproduceErrorCommand)

概述

debug:reproduce-error 命令用于通过 sys_request_logs 表中的请求记录来复现错误请求,帮助开发者进行调试和问题排查。

功能特性

  • 支持通过 idrequest_unidrun_unid 查找请求记录
  • 自动提取请求记录中的 protobuf_jsontoken 信息
  • 参考 ProtoJsonRequestTest 的实现方式发起 HTTP 请求
  • 使用环境变量 UNITTEST_URL 作为目标地址
  • 详细的日志记录和错误处理
  • 支持自定义请求超时时间

命令语法

php artisan debug:reproduce-error <identifier> [options]

参数

  • identifier: 请求标识符,可以是以下任意一种:
    • 数据库记录的 id(数字)
    • request_unid(字符串)
    • run_unid(字符串)

选项

  • --type=TYPE: 指定标识符类型,可选值:

    • auto(默认):自动检测类型
    • id:按数据库 ID 查找
    • request_unid:按请求唯一标识符查找
    • run_unid:按运行唯一标识符查找
  • --timeout=SECONDS: 设置请求超时时间(秒),默认为 30 秒

使用示例

1. 通过数据库 ID 复现请求

php artisan debug:reproduce-error 68973973

2. 通过 request_unid 复现请求

php artisan debug:reproduce-error 6840202392627

3. 指定标识符类型

php artisan debug:reproduce-error 68973973 --type=id
php artisan debug:reproduce-error 6840202392627 --type=request_unid

4. 设置自定义超时时间

php artisan debug:reproduce-error 68973973 --timeout=60

输出示例

开始查找请求记录...
标识符: 68973973
类型: auto
找到请求记录:
  ID: 68973973
  Request UNID: 6840202392627
  Run UNID: 
  路径: gameapi
  方法: POST
  创建时间: 2025-06-04 18:29:55
提取到 token: f4b3c51a58...
目标地址: http://kku_laravel.local.gd/
开始发起请求...
请求完成,响应结果:
状态码: 200
响应头:
  Server: nginx/1.27.4
  Date: Wed, 04 Jun 2025 12:59:52 GMT
  Content-Type: application/json
  Transfer-Encoding: chunked
  Connection: keep-alive
  X-Powered-By: PHP/8.3.21
  Cache-Control: no-cache, private
  Vary: Origin
响应内容:
{"runUnid":"68404347a6a07","runMs":"6","code":"OK","callpath":"Shop-Query","lastData":[],"shopQuery":{"lastTimes":"1748943300"}}

环境配置

确保在 .env 文件中配置了正确的 UNITTEST_URL

UNITTEST_URL=http://kku_laravel.local.gd/

错误处理

命令会处理以下错误情况:

  1. 未找到请求记录:当指定的标识符在数据库中不存在时
  2. 缺少 protobuf_json 数据:当请求记录中没有必要的请求数据时
  3. 网络请求失败:当向目标服务器发起请求失败时
  4. JSON 解析错误:当解析 headers 或响应数据失败时

日志记录

命令会在 Laravel 日志中记录详细的执行信息:

  • 请求开始和完成的时间戳
  • 请求和响应的数据长度
  • 错误信息和堆栈跟踪

技术实现

核心组件

  1. RequestLog 模型:用于查询 sys_request_logs
  2. GuzzleHttp 客户端:用于发起 HTTP 请求
  3. JSON 解析:提取 headers 中的 token 信息
  4. 错误处理:完善的异常捕获和用户友好的错误提示

请求流程

  1. 根据标识符和类型查找请求记录
  2. 验证请求记录的完整性
  3. 从 headers 中提取 token
  4. 初始化 HTTP 客户端
  5. 发起 POST 请求到 /gameapi 端点
  6. 解析和展示响应结果

注意事项

  • 命令会禁用 SSL 验证以支持本地开发环境
  • Token 在输出时会被截断显示以保护敏感信息
  • 请求超时时间可以根据实际需要调整
  • 确保目标服务器能够正常处理复现的请求

相关文件

  • 命令文件:app/Console/Commands/ReproduceErrorCommand.php
  • 模型文件:UCore/Model/RequestLog.php
  • 测试参考:tests/Unit/ProtoJsonRequestTest.php