SqlLogServiceProvider.php 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?php
  2. namespace App\Providers;
  3. use Illuminate\Database\Events\QueryExecuted;
  4. use Illuminate\Support\Facades\DB;
  5. use UCore\Helper\Logger;
  6. use Illuminate\Support\ServiceProvider;
  7. class SqlLogServiceProvider extends ServiceProvider
  8. {
  9. /**
  10. * 注册服务
  11. */
  12. public function register(): void
  13. {
  14. //
  15. }
  16. /**
  17. * 启动服务
  18. */
  19. public function boot(): void
  20. {
  21. // 只在非生产环境下记录SQL查询
  22. if (app()->environment('local', 'development', 'testing')) {
  23. DB::listen(function (QueryExecuted $query) {
  24. $sql = $query->sql;
  25. // 替换绑定参数
  26. foreach ($query->bindings as $binding) {
  27. $value = is_numeric($binding) ? $binding : "'{$binding}'";
  28. $sql = preg_replace('/\?/', $value, $sql, 1);
  29. }
  30. // 使用UCore\Helper\Logger记录SQL查询、执行时间和连接名称
  31. Logger::debug('SQL', [
  32. 'sql' => $sql,
  33. 'time' => "{$query->time}ms",
  34. 'connection' => $query->connectionName
  35. ]);
  36. });
  37. }
  38. }
  39. }