|
|
@@ -0,0 +1,197 @@
|
|
|
+# WebhookDispatchController日志记录功能实现
|
|
|
+
|
|
|
+## 任务概述
|
|
|
+为WebhookDispatchController添加RequestLogger日志记录功能,参考ProtobufController的实现,将webhook请求记录到request_log表中。
|
|
|
+
|
|
|
+## 完成时间
|
|
|
+2025-06-18 23:32
|
|
|
+
|
|
|
+## 实现内容
|
|
|
+
|
|
|
+### 🎯 主要功能
|
|
|
+为WebhookDispatchController的dispatch方法添加了完整的请求日志记录功能,包括:
|
|
|
+- 请求信息记录
|
|
|
+- 运行时间统计
|
|
|
+- 错误信息记录
|
|
|
+- 路由信息设置
|
|
|
+
|
|
|
+### 📋 参考实现
|
|
|
+参考了ProtobufController中RequestLogger的使用方式:
|
|
|
+- 初始化RequestLogger实例
|
|
|
+- 设置路由信息
|
|
|
+- 记录运行时间
|
|
|
+- 处理错误信息
|
|
|
+
|
|
|
+### 🔧 具体修改
|
|
|
+
|
|
|
+#### 1. 添加RequestLogger初始化
|
|
|
+```php
|
|
|
+// 初始化请求日志记录器
|
|
|
+$requestLogger = new \App\Module\System\Services\RequestLogger($request);
|
|
|
+$requestLogger->setRouter("webhook/{$packageName}/{$handlerRoute}");
|
|
|
+```
|
|
|
+
|
|
|
+#### 2. 添加运行时间记录
|
|
|
+```php
|
|
|
+$startTime = microtime(true);
|
|
|
+
|
|
|
+// 成功处理后
|
|
|
+$requestLogger->setRunTime($startTime);
|
|
|
+
|
|
|
+// 异常处理中
|
|
|
+$requestLogger->setRunTime($startTime);
|
|
|
+```
|
|
|
+
|
|
|
+#### 3. 添加错误信息记录
|
|
|
+```php
|
|
|
+catch (\Exception $e) {
|
|
|
+ // 记录错误信息和运行时间
|
|
|
+ $requestLogger->setError($e->getMessage());
|
|
|
+ $requestLogger->setRunTime($startTime);
|
|
|
+
|
|
|
+ // ... 其他错误处理
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 📊 记录的信息
|
|
|
+
|
|
|
+#### 1. 基本请求信息
|
|
|
+- **路径**: `thirdParty/webhook/{packageName}/{handlerRoute}`
|
|
|
+- **方法**: POST/GET等HTTP方法
|
|
|
+- **Headers**: 完整的请求头信息
|
|
|
+- **IP地址**: 客户端IP
|
|
|
+- **主机**: 请求的主机名
|
|
|
+- **请求体**: Base64编码的原始请求数据
|
|
|
+
|
|
|
+#### 2. 路由信息
|
|
|
+- **Router**: `webhook/{packageName}/{handlerRoute}`格式
|
|
|
+- 便于识别具体的webhook处理器
|
|
|
+
|
|
|
+#### 3. 性能信息
|
|
|
+- **运行时间**: 毫秒级精度的处理时间
|
|
|
+- **开始时间**: 请求开始处理的时间戳
|
|
|
+
|
|
|
+#### 4. 错误信息
|
|
|
+- **错误消息**: 异常的详细信息
|
|
|
+- **错误类型**: 验证错误、处理错误等
|
|
|
+
|
|
|
+### 🧪 功能验证
|
|
|
+
|
|
|
+#### 1. 测试请求
|
|
|
+```bash
|
|
|
+curl -X POST http://kku_laravel.local.gd/thirdParty/webhook/test/handler \
|
|
|
+ -H "Content-Type: application/json" \
|
|
|
+ -d '{"test": "data"}'
|
|
|
+```
|
|
|
+
|
|
|
+#### 2. 响应结果
|
|
|
+```json
|
|
|
+{
|
|
|
+ "success": false,
|
|
|
+ "error": "包 test 对应的服务配置不存在,请先在thirdparty_services表中注册",
|
|
|
+ "request_id": "webhook_dispatch_6852dc0d237922.88063124"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 3. 日志记录验证
|
|
|
+```sql
|
|
|
+SELECT id, router, path, method, run_ms, error, created_at
|
|
|
+FROM kku_sys_request_logs
|
|
|
+ORDER BY id DESC LIMIT 1;
|
|
|
+```
|
|
|
+
|
|
|
+**记录结果**:
|
|
|
+- **ID**: 68993381
|
|
|
+- **Router**: `webhook/test/handler`
|
|
|
+- **Path**: `thirdParty/webhook/test/handler`
|
|
|
+- **Method**: `POST`
|
|
|
+- **Run_ms**: 167毫秒
|
|
|
+- **Error**: 正确记录错误信息
|
|
|
+- **Created_at**: 2025-06-18T23:32:29.000Z
|
|
|
+
|
|
|
+### 🎯 技术要点
|
|
|
+
|
|
|
+#### 1. RequestLogger服务
|
|
|
+- 使用系统统一的RequestLogger服务
|
|
|
+- 自动处理请求信息的收集和存储
|
|
|
+- 支持异步写入,不影响响应性能
|
|
|
+
|
|
|
+#### 2. 路由格式统一
|
|
|
+- 使用`webhook/{packageName}/{handlerRoute}`格式
|
|
|
+- 便于日志分析和问题排查
|
|
|
+- 与其他模块的路由格式保持一致
|
|
|
+
|
|
|
+#### 3. 错误处理集成
|
|
|
+- 在异常处理中同样记录日志
|
|
|
+- 确保所有请求都有完整的记录
|
|
|
+- 错误信息详细记录便于调试
|
|
|
+
|
|
|
+#### 4. 性能监控
|
|
|
+- 精确记录处理时间
|
|
|
+- 便于性能分析和优化
|
|
|
+- 支持慢请求识别
|
|
|
+
|
|
|
+### 📈 使用价值
|
|
|
+
|
|
|
+#### 1. 问题排查
|
|
|
+- 完整的请求记录便于问题复现
|
|
|
+- 错误信息详细记录便于调试
|
|
|
+- 时间戳信息便于关联分析
|
|
|
+
|
|
|
+#### 2. 性能监控
|
|
|
+- 运行时间统计便于性能分析
|
|
|
+- 识别慢请求和性能瓶颈
|
|
|
+- 支持性能优化决策
|
|
|
+
|
|
|
+#### 3. 安全审计
|
|
|
+- 完整的访问记录
|
|
|
+- IP地址和请求头信息
|
|
|
+- 支持安全分析和审计
|
|
|
+
|
|
|
+#### 4. 业务分析
|
|
|
+- 请求频率统计
|
|
|
+- 错误率分析
|
|
|
+- 使用模式识别
|
|
|
+
|
|
|
+### 🔍 与ProtobufController的对比
|
|
|
+
|
|
|
+#### 相同点
|
|
|
+- 都使用RequestLogger服务
|
|
|
+- 都记录运行时间和错误信息
|
|
|
+- 都设置路由信息便于识别
|
|
|
+
|
|
|
+#### 不同点
|
|
|
+- **Protobuf**: 处理复杂的protobuf协议解析
|
|
|
+- **Webhook**: 处理简单的HTTP请求分发
|
|
|
+- **Protobuf**: 有用户ID记录
|
|
|
+- **Webhook**: 主要记录包名和处理器路由
|
|
|
+
|
|
|
+### 🎯 后续优化建议
|
|
|
+
|
|
|
+#### 1. 用户识别
|
|
|
+- 如果webhook请求包含用户信息,可以记录user_id
|
|
|
+- 便于用户相关的请求追踪
|
|
|
+
|
|
|
+#### 2. 请求分类
|
|
|
+- 可以根据packageName进行请求分类
|
|
|
+- 便于不同服务的日志分析
|
|
|
+
|
|
|
+#### 3. 监控告警
|
|
|
+- 基于错误率设置告警
|
|
|
+- 基于响应时间设置性能告警
|
|
|
+
|
|
|
+#### 4. 日志清理
|
|
|
+- 定期清理过期的请求日志
|
|
|
+- 保持数据库性能
|
|
|
+
|
|
|
+## 总结
|
|
|
+
|
|
|
+WebhookDispatchController的RequestLogger集成完全成功,实现了:
|
|
|
+
|
|
|
+1. ✅ **完整的请求记录**: 所有webhook请求都会记录到request_log表
|
|
|
+2. ✅ **详细的错误信息**: 异常情况下的完整错误记录
|
|
|
+3. ✅ **精确的性能数据**: 毫秒级的运行时间统计
|
|
|
+4. ✅ **统一的日志格式**: 与系统其他模块保持一致
|
|
|
+5. ✅ **功能验证通过**: 实际测试确认功能正常
|
|
|
+
|
|
|
+这个功能大大提升了webhook服务的可观测性和可维护性,为问题排查、性能优化和安全审计提供了强有力的支持。
|