Laravel 实时监听打印 SQL
创建监听器
php artisan make:listener QueryListener --event=Illuminate\\Database\\Events\\QueryExecuted
打开
app/Providers/EventServiceProvider.php
,在$listen中添加
protected $listen = [
'Illuminate\Database\Events\QueryExecuted' => [
'App\Listeners\QueryListener,
]
];
打开
QueryListener
文件
use \Log;
public function handle (QueryExecuted $event)
{
if (env('APP_ENV', 'production') == 'local') {
$sql = str_replace("?", "'%s'", $event->sql);
$log = vsprintf($sql, $event->bindings);
Log::info($log);
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
:smile:
拉个debugbar 更好用
博客:Laravel 中输出 SQL 语句的到 log 日志
这个也可以啊
``
DB::listen(function($query) {
$tmp = str_replace('?', '"'.'%s'.'"', $query->sql);
$tmp = vsprintf($tmp, $query->bindings);
$tmp = str_replace("\","",$tmp);
Log::info($tmp."\n\n\t");
});
@jaak 你的那个也是可以的,各有所爱 :wink:
mark
lara么有像tp一样的getLastSql() 么?
@xflyhack 有的
@xflyhack
<?php
DB::connection()->enableQueryLog(); // 开启查询日志
DB::table('xxx')->where('id', '=', 5)->get();
echo DB::getQueryLog()
学习了
大神,我按你写的报错这个 是什么原因啊??请指教~
为什么我这边弄好了,,但是还是不执行呢?!需要开队列吗?
@Complicated 不需要的,Event 里面的注册好了嘛
vsprintf 模糊查询时,因为携带有%号,参数会对应不上,导致报错!
如何区分查询和操作事件呢,日志只关注改变数据的操作,忽略所有的查询语句
sql