RequestLogger.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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 setRouter(string $router)
  48. {
  49. $this->requestLog->router = $router;
  50. }
  51. public function setUserId(int $user_id)
  52. {
  53. $this->requestLog->user_id = $user_id;
  54. }
  55. public function setRunTime(float $startTime)
  56. {
  57. $endTime = microtime(true);
  58. $this->requestLog->run_ms = intval(($endTime - $startTime) * 1000);
  59. }
  60. public function setProtobuf(Request $request)
  61. {
  62. $jsonData = $request->serializeToJsonString();
  63. $this->requestLog->protobuf_json = $jsonData ;
  64. $this->requestLog->request_unid = $request->getRequestUnid();
  65. }
  66. public function __destruct()
  67. {
  68. if ($this->response) {
  69. $this->requestLog->response = $this->response->serializeToJsonString();
  70. }
  71. $this->requestLog->update();
  72. }
  73. }