RequestLogger.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace App\Module\System\Services;
  3. use Google\Protobuf\Internal\Message;
  4. use Illuminate\Http\Request as HttpRequest;
  5. use UCore\Model\RequestLog;
  6. use Uraus\Kku\Request;
  7. class RequestLogger
  8. {
  9. static $di;
  10. /**
  11. * @var RequestLog $requestLog
  12. */
  13. private $requestLog;
  14. private $httpRequest;
  15. private $response;
  16. public function __construct(HttpRequest $httpRequest)
  17. {
  18. $this->httpRequest = $httpRequest;
  19. $this->requestLog = new RequestLog();
  20. // 初始化请求日志
  21. $this->requestLog->request_unid = RUN_UNIQID;
  22. $this->requestLog->run_unid = RUN_UNIQID;
  23. $this->requestLog->path = $httpRequest->path();
  24. $this->requestLog->method = $httpRequest->method();
  25. $this->requestLog->headers = json_encode($httpRequest->headers->all());
  26. $this->requestLog->ipaddress = $httpRequest->ip();
  27. $this->requestLog->host = $httpRequest->getHost();
  28. $this->requestLog->post = base64_encode($httpRequest->getContent());
  29. $this->requestLog->sale_date = strtotime(date('Y-m-d'));
  30. $this->requestLog->save();
  31. }
  32. public static function getDi()
  33. {
  34. if (!self::$di) {
  35. self::$di = new RequestLogger(request());
  36. }
  37. return self::$di;
  38. }
  39. public function setResponse(Message $response)
  40. {
  41. $this->response = $response;
  42. }
  43. public function setError(string $error)
  44. {
  45. $this->requestLog->error = $error;
  46. }
  47. public function setUserId(int $user_id)
  48. {
  49. $this->requestLog->user_id = $user_id;
  50. }
  51. public function setRunTime(float $startTime)
  52. {
  53. $endTime = microtime(true);
  54. $this->requestLog->run_ms = intval(($endTime - $startTime) * 1000);
  55. }
  56. public function setProtobuf(Request $request)
  57. {
  58. $jsonData = $request->serializeToJsonString();
  59. $this->requestLog->protobuf_json = $jsonData ;
  60. $this->requestLog->request_unid = $request->getRequestUnid();
  61. }
  62. public function __destruct()
  63. {
  64. if ($this->response) {
  65. $this->requestLog->response = $this->response->serializeToJsonString();
  66. }
  67. $this->requestLog->update();
  68. }
  69. }