RequestLogger.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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 setRunTime(float $startTime)
  48. {
  49. $endTime = microtime(true);
  50. $this->requestLog->run_ms = intval(($endTime - $startTime) * 1000);
  51. }
  52. public function setProtobuf(Request $request)
  53. {
  54. $jsonData = $request->serializeToJsonString();
  55. $this->requestLog->protobuf_json = $jsonData ;
  56. $this->requestLog->request_unid = $request->getRequestUnid();
  57. }
  58. public function __destruct()
  59. {
  60. if ($this->response) {
  61. $this->requestLog->response = $this->response->serializeToJsonString();
  62. }
  63. $this->requestLog->update();
  64. }
  65. }