RequestHandledListener.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. /*
  3. * This file is part of the Jiannei/laravel-logger.
  4. *
  5. * (c) Jiannei <longjian.huang@foxmail.com>
  6. *
  7. * This source file is subject to the MIT license that is bundled
  8. * with this source code in the file LICENSE.
  9. */
  10. namespace App\Listeners;
  11. use Symfony\Component\HttpFoundation\Response as SymfonyResponse;
  12. class RequestHandledListener
  13. {
  14. public function handle($event)
  15. {
  16. $url = $event->request->server('REQUEST_URI');
  17. if (strpos($url, "/admin/") !== 0) return;
  18. if (strtolower($event->request->server('REQUEST_METHOD')) === 'get') return;
  19. $start = $event->request->server('REQUEST_TIME_FLOAT');
  20. $end = microtime(true);
  21. $request = $event->request->all();
  22. if ($files = $event->request->allFiles()) {
  23. foreach ($files as $key => $uploadedFile) {
  24. $request[$key] = [
  25. 'originalName' => $uploadedFile->getClientOriginalName(),
  26. 'mimeType' => $uploadedFile->getClientMimeType(),
  27. ];
  28. }
  29. }
  30. $guard = config('logging.guard', false);
  31. $user = false;
  32. if ($guard) {
  33. $user = auth($guard)->user();
  34. if ($user) {
  35. $user = [
  36. 'id' => $user['id'],
  37. 'name' => $user['name'],
  38. 'username' => $user['username'],
  39. ];
  40. }
  41. }
  42. $context = [
  43. 'request' => $request,
  44. 'response' => $event->response instanceof SymfonyResponse ? json_decode($event->response->getContent(), true) : (string)$event->response,
  45. 'start' => $start,
  46. 'end' => $end,
  47. 'duration' => format_duration($end - $start),
  48. 'user' => $user ?? null,
  49. ];
  50. logger_async(\config('logging.request.message'), $context)
  51. ->onConnection(\config('logging.request.connection'))
  52. ->onQueue(\config('logging.request.queue'));
  53. }
  54. }