一、 生成监听器
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. 以上就可以满足日常开发