LogJob.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. /*
  3. * This file is part of the ZhMead/laravel-logger.
  4. *
  5. * (c) Mead <751066209@qql.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\Jobs;
  11. use App\Repositories\Models\Base\Permission;
  12. use Carbon\Carbon;
  13. use Illuminate\Bus\Queueable;
  14. use Illuminate\Contracts\Queue\ShouldQueue;
  15. use Illuminate\Queue\InteractsWithQueue;
  16. use Illuminate\Support\Facades\Cache;
  17. use Illuminate\Support\Facades\Log;
  18. class LogJob implements ShouldQueue
  19. {
  20. use InteractsWithQueue;
  21. use Queueable;
  22. private $context;
  23. private $message;
  24. private $serverData;
  25. public function __construct(string $message, array $context = null, array $serverData = null)
  26. {
  27. $this->message = $message;
  28. $this->context = $context;
  29. $this->serverData = $serverData;
  30. }
  31. public function handle()
  32. {
  33. $message = $this->message;
  34. $context = $this->context;
  35. $serverData = $this->serverData;
  36. $user = false;
  37. if ($context['user'] && is_array($context['user'])) {
  38. $user = $context['user'];
  39. }
  40. $info = Permission::byUrlGetDescription(parse_url($serverData['REQUEST_URI'])['path'], $serverData['REQUEST_METHOD']);
  41. $description = '未知';
  42. if ($info) {
  43. $description = $info['module'] . '-' . $info['nickname'];
  44. }
  45. //获取登录地址
  46. $ip = getClientIp();
  47. if ($ip == '127.0.0.1') return;
  48. $address = Cache::remember($ip, Carbon::now()->addHours(4), function () use ($ip) {
  49. return get_ip_city($ip);
  50. });
  51. \App\Repositories\Models\Base\Log::query()->create([
  52. 'description' => $description,
  53. 'url' => $serverData['REQUEST_URI'],
  54. 'log_type' => $message,
  55. 'method' => $serverData['REQUEST_METHOD'],
  56. 'params' => $context['request'],
  57. 'request_ip' => $ip,
  58. 'duration' => $context['duration'],
  59. 'admin_id' => $user ? $user['id'] : 0,
  60. 'username' => $user ? $user['username'] : '',
  61. 'browser' => $serverData['HTTP_USER_AGENT'],
  62. 'detail' => $context,
  63. 'address' => $address,
  64. ]);
  65. }
  66. }