QueryListener.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace App\Listeners;
  3. use Illuminate\Contracts\Queue\ShouldQueue;
  4. use Illuminate\Database\Events\QueryExecuted;
  5. use Illuminate\Queue\InteractsWithQueue;
  6. use App\Facades\Servers\Logs\Log;
  7. /**
  8. * SQL监听
  9. *
  10. */
  11. class QueryListener
  12. {
  13. /**
  14. * Create the event listener.
  15. *
  16. * @return void
  17. */
  18. public function __construct()
  19. {
  20. //
  21. }
  22. /**
  23. * Handle the event.
  24. *
  25. * @param QueryExecuted $event
  26. * @return void
  27. */
  28. public function handle(QueryExecuted $event)
  29. {
  30. try{
  31. // SQL语句
  32. $sql = str_replace("?", "%s", $event->sql);
  33. // 循环处理
  34. foreach ($event->bindings as $i => $binding) {
  35. // 如果是时间
  36. if ($binding instanceof \DateTime) {
  37. $event->bindings[$i] = $binding->format('\'Y-m-d H:i:s\'');
  38. }else {
  39. if (is_string($binding)) $event->bindings[$i] = $binding;
  40. }
  41. }
  42. // 格式化数据
  43. $log = vsprintf($sql, $event->bindings);
  44. // 不是生产环境记录sql日志
  45. if( config('app.env') != 'production' ) Log::log('sql',$log,[ 'RunTime:'.$event->time.'ms' ]);
  46. }catch (\Exception $e){
  47. }
  48. }
  49. }