SqlLogServiceProvider.php 1.4 KB

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