notfff 7 månader sedan
förälder
incheckning
9598703e52

+ 137 - 0
AiWork/2025年05月/31日1733-优化异常日志记录系统.md

@@ -0,0 +1,137 @@
+# 优化异常日志记录系统
+
+## 任务时间
+- 开始时间:2025-05-31 17:20
+- 完成时间:2025-05-31 17:33
+
+## 任务背景
+在 `BuyHandler.php` 中发现了推荐和不推荐的异常日志记录方式,需要优化 `Logger::exception` 方法并统一项目中的异常日志记录格式。
+
+## 优化内容
+
+### 1. 优化 Logger::exception 方法
+**文件**: `UCore/Helper/Logger.php`
+
+**主要改进**:
+- **格式化堆栈跟踪**:使用 `str_replace('#', "\n#", $traceString)` 使堆栈跟踪换行显示
+- **增加异常详细信息**:添加异常文件路径和行号
+- **美化JSON输出**:使用 `JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT` 格式化输出
+- **完善注释**:添加详细的参数说明
+
+**优化前**:
+```php
+static public function exception($msg, \Throwable $exception, $data = [])
+{
+    $data = [
+        'msg'          => $exception->getMessage(),
+        'trace_string' => $exception->getTraceAsString(),
+        'data'         => $data
+    ];
+    Log::error($msg . ' ' . json_encode($data));
+}
+```
+
+**优化后**:
+```php
+static public function exception($msg, \Throwable $exception, $data = [])
+{
+    // 格式化堆栈跟踪,使其换行显示
+    $traceString = $exception->getTraceAsString();
+    $formattedTrace = str_replace('#', "\n#", $traceString);
+    
+    $logData = [
+        'msg'          => $exception->getMessage(),
+        'file'         => $exception->getFile(),
+        'line'         => $exception->getLine(),
+        'trace_string' => $formattedTrace,
+        'data'         => $data
+    ];
+    
+    Log::error($msg . ' ' . json_encode($logData, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
+}
+```
+
+### 2. 统一异常日志记录格式
+将项目中所有使用 `Log::error` 记录异常的地方替换为 `Logger::exception`:
+
+**替换模式**:
+```php
+// 旧方式(不推荐)
+Log::error('错误信息', [
+    'error' => $e->getMessage(),
+    'trace' => $e->getTraceAsString(),
+    'other_data' => $value
+]);
+
+// 新方式(推荐)
+Logger::exception('错误信息', $e, [
+    'other_data' => $value
+]);
+```
+
+### 3. 修改的文件列表
+1. `app/Module/AppGame/Handler/Shop/BuyHandler.php` - 移除示例代码,使用推荐方式
+2. `app/Module/Farm/Logics/HarvestLogLogic.php` - 替换5处异常日志记录
+3. `app/Module/Farm/Logics/TeamProfitLogic.php` - 替换5处异常日志记录
+4. `app/Module/Dev/Logics/DevLogic.php` - 替换1处异常日志记录
+5. `app/Module/AppGame/HttpControllers/ProtobufController.php` - 替换2处异常日志记录
+6. `app/Module/AppGame/Tests/Land/DisasterRemovalTestSuite.php` - 替换1处异常日志记录
+7. `app/Module/Farm/Logics/DisasterLogic.php` - 替换1处异常日志记录
+8. `app/Module/System/Listeners/SystemEventListener.php` - 替换1处异常日志记录
+
+## 优化效果
+
+### 1. 提升日志可读性
+- **换行显示**:堆栈跟踪信息按行显示,便于阅读
+- **格式化输出**:JSON格式美化,结构清晰
+- **中文支持**:使用 `JSON_UNESCAPED_UNICODE` 正确显示中文
+
+### 2. 增强调试效率
+- **文件定位**:直接显示异常发生的文件路径
+- **行号定位**:精确显示异常发生的行号
+- **统一格式**:所有异常日志格式一致,便于分析
+
+### 3. 简化代码维护
+- **减少重复代码**:不需要手动添加 `getMessage()` 和 `getTraceAsString()`
+- **统一接口**:所有异常日志使用相同的方法
+- **自动处理**:异常信息自动提取和格式化
+
+## 示例对比
+
+### 优化前的日志输出
+```json
+{"error":"购买商品操作异常","trace":"#0 /path/to/file.php(123): method()...","user_id":1001}
+```
+
+### 优化后的日志输出
+```json
+{
+    "msg": "购买商品操作异常",
+    "file": "/path/to/file.php",
+    "line": 123,
+    "trace_string": "
+#0 /path/to/file.php(123): method()
+#1 /path/to/other.php(456): otherMethod()
+#2 {main}",
+    "data": {
+        "user_id": 1001,
+        "good_id": 2001,
+        "number": 5
+    }
+}
+```
+
+## 提交信息
+```
+优化异常日志记录系统
+
+- 优化Logger::exception方法,改进trace_string格式化,使其换行显示
+- 添加异常文件和行号信息,提高调试效率
+- 使用JSON_PRETTY_PRINT格式化输出,提升可读性
+- 替换项目中所有Log::error异常记录为Logger::exception
+- 统一异常日志记录格式,简化代码维护
+- 移除BuyHandler中的示例代码注释
+```
+
+## 状态
+✅ 已完成 - 代码已提交并推送,异常日志记录系统优化完成

+ 15 - 27
AiWork/WORK.md

@@ -10,33 +10,24 @@
 
 ## 待处理任务
 
-物品分解规则  的
- $item_id  物品ID,
- 外键关联kku_item_items表,
-  $reward_group_id  奖励组ID,
-  $consume_group_id  消耗组ID,
-   $condition_group_id  条件组ID,
-   $min_rarity  最小适用稀有度,
-   $max_rarity  最大适用稀有度,
-   $priority  规则优先级
-分别负责什么功能,检查代码中是否与期望规则一致,维护一份`物品分解系统`文档
-
-检查系统,,
-奖励实现: 随机三种物品,A %10 1-10个 未命中没有;B 30% 5- 20个 未命中没有; C 必中 10-50个;目前的奖励组系统能实现么?不能实现进行改进
-
-分解系统也是,优化合成系统,消耗使用‘消耗组’,合成结果 使用‘奖励组’,解锁条件使用 ’条件组
-修正 GenerateDismantleJsonCommand GenerateRecipeJsonCommand
-
-物品合成配方:
-1. 400苹果果实+ 400西瓜果实 = 1 木材
-2. 800苹果果实 + 150 南瓜果实= 1 钢材
-3. 800西瓜果实 + 150 草莓果实 = 1石材
-4.  35 萝卜果实 = 1普通宠物口粮
-4.  70 苹果果实 = 1高级宠物口粮
+给 BuyHandler 编写一个 ProtobufRequestTest ,参考 tests/Dev/TestShifei.php 
+{
+    "shopBuy": {
+        "good_id":6,
+        "number":1
+    }
+}
+
+
 
 
 ## 已完成任务(保留最新的10条,多余的删除)
 
+- [x] 2025-05-31 17:33 - 优化异常日志记录系统
+  - 任务记录: `AiWork/2025年05月/31日1733-优化异常日志记录系统.md`
+  - 完成时间: 2025-05-31 17:33
+  - 描述: 优化Logger::exception方法格式化输出,统一项目中所有异常日志记录格式,提升日志可读性和调试效率,简化代码维护
+
 - [x] 2025-05-31 17:19 - 修复商店购买记录表字段约束问题
   - 任务记录: `AiWork/2025年05月/31日1719-修复商店购买记录表字段约束问题.md`
   - 完成时间: 2025-05-31 17:19
@@ -97,10 +88,7 @@
   - 完成时间: 2025-05-27 19:20
   - 描述: 修复数据库表名前缀问题和Grid回调函数参数错误,重命名表为kku_farm_mystery_seed_land_effects,优化界面显示效果
 
-- [x] 2025-05-27 18:45 - 修复神秘种子土地影响控制器
-  - 任务记录: `AiWork/2025年05月/27日1845-修复神秘种子土地影响控制器.md`
-  - 完成时间: 2025-05-27 18:45
-  - 描述: 修复FarmMysterySeeLandEffectController的所有问题,参考其他控制器规范,添加路由注解,集成到后台菜单,优化用户体验和数据验证
+
 
 
 

+ 40 - 0
tests/Dev/TestShopBuy.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace Dev;
+
+use Tests\TestCase;
+use Tests\Unit\ProtoJsonRequestTest;
+
+/**
+ * 测试施肥
+ *
+ */
+class TestShopBuy extends ProtoJsonRequestTest
+{
+
+    public $token = 'f4b3c51a583a601c3e6130710490f64a';
+
+    public function test_1()
+    {
+        $resp = $this->protobufRequest();
+        // 必要的验证
+        dump($resp->serializeToJsonString());
+    }
+
+    /**
+     * 获取请求的Protobuf数据
+     * @return string
+     */
+    public function requestProtobufJson():string
+    {
+
+        return '{
+    "shopBuy": {
+        "good_id":6,
+        "number":1
+    }
+}';
+
+    }
+
+}

+ 7 - 0
tests/Unit/ProtoJsonRequestTest.php

@@ -20,6 +20,12 @@ abstract class ProtoJsonRequestTest extends \Tests\TestCase implements ProtoJson
 
     public $assertEquals = 200;
 
+    /**
+     *
+     * @var string $token
+     */
+    public $token = '';
+
     public function setUp(): void
     {
         parent::setUp();
@@ -58,6 +64,7 @@ abstract class ProtoJsonRequestTest extends \Tests\TestCase implements ProtoJson
         $response = $this->client->post('/gameapi', [
             'body'    => $requestJson,
             'headers' => [
+                'token'=>$this->token,
                 'Content-Type' => 'application/json',
                 'Accept'       => 'application/json'
             ]