laravel记录sql执行记录

一、 生成监听器

php artisan make:listener DBQueryLister

二、绑定监听事件

文件 \App\Providers\EventServiceProvider

# 头部引入  use Illuminate\Database\Events\QueryExecuted;


protected $listen = [    
  // other 
  QueryExecuted::class => [        
    DBQueryListener::class,    
  ],
];

三:监听的代码

public function handle($event) 
{    
  try {        
    if (config('app.debug') == true) {            
      $sql = str_replace('?', "'%s'", $event->sql);            
      $log = vsprintf($sql, $event->bindings);            
      $this->put_log('sql', $log);        
    }
    
  } catch (\Throwable $exception) { // 此处应抓取 Throwable, 如果是Exception ,存在有些异常无法抓取
        
  }
}


/** * 写入日志 * @param string $file * @param string $content */
private function put_log($file = 'app', $content = '')
{    
  $data = date('Y-m-d');    
  $cut_line = str_repeat("-", 100);    
  is_dir(storage_path('logs/sql')) or mkdir(storage_path('logs/sql'), 0777, true); // 文件夹不存在则创建    
  $content = '[' . date('Y-m-d H:i:s') . "]" . $content;    
  @file_put_contents(storage_path('logs/sql/' . $file . '-' . $data . '.log'), $content . "\n" . $cut_line . "\n\n", FILE_APPEND);
}

四、总结

1. 以上就可以满足日常开发