RequestLogger.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. class RequestLogger
  7. {
  8. static $di;
  9. /**
  10. * @var RequestLog $requestLog
  11. */
  12. private $requestLog;
  13. private $httpRequest;
  14. private $response;
  15. public function __construct(HttpRequest $httpRequest)
  16. {
  17. $this->httpRequest = $httpRequest;
  18. $this->requestLog = new RequestLog();
  19. // 初始化请求日志
  20. $this->requestLog->request_unid = RUN_UNIQID;
  21. $this->requestLog->path = $httpRequest->path();
  22. $this->requestLog->method = $httpRequest->method();
  23. $this->requestLog->headers = json_encode($httpRequest->headers->all());
  24. $this->requestLog->ipaddress = $httpRequest->ip();
  25. $this->requestLog->host = $httpRequest->getHost();
  26. $this->requestLog->post = base64_encode($httpRequest->getContent());
  27. $this->requestLog->sale_date = strtotime(date('Y-m-d'));
  28. $this->requestLog->save();
  29. }
  30. public static function getDi()
  31. {
  32. if (!self::$di) {
  33. self::$di = new RequestLogger(request());
  34. }
  35. return self::$di;
  36. }
  37. public function setResponse(Message $response)
  38. {
  39. $this->response = $response;
  40. }
  41. public function setError(string $error)
  42. {
  43. $this->requestLog->error = $error;
  44. }
  45. public function setRunTime(float $startTime)
  46. {
  47. $endTime = microtime(true);
  48. $this->requestLog->run_ms = intval(($endTime - $startTime) * 1000);
  49. }
  50. public function setProtobufJson(string $jsonData)
  51. {
  52. $this->requestLog->protobuf_json = $jsonData;
  53. }
  54. public function __destruct()
  55. {
  56. if ($this->response) {
  57. $this->requestLog->response = $this->response->serializeToJsonString();
  58. }
  59. $this->requestLog->update();
  60. }
  61. }