|
|
@@ -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中的示例代码注释
|
|
|
+```
|
|
|
+
|
|
|
+## 状态
|
|
|
+✅ 已完成 - 代码已提交并推送,异常日志记录系统优化完成
|