项目根目录下执行:
php artisan make:listener SqlListener -e=QueryExecuted
会在App\Listener\下生成一个SqlListener文件,修改代码:
namespace App\Listeners;
use Illuminate\Database\Events\QueryExecuted;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class SqlListener
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param =QueryExecuted $event
* @return void
*/
public function handle(QueryExecuted $event)
{
//
$sql = str_replace("?", "'%s'", $event->sql);
$log = vsprintf($sql, $event->bindings);
$log .= "\r\n-----------------------------------------------";
$log = $log . "\r\n";
$filePath =storage_path('logs/sql.log');
file_put_contents($filePath, $log, FILE_APPEND);
}
}
然后在App/Provider/EventServiceProvider.php中加入:
namespace App\Providers;
use Illuminate\Support\Facades\Event;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'App\Events\SomeEvent' => [
'App\Listeners\EventListener',
],
'Illuminate\Database\Events\QueryExecuted' => [
'App\Listeners\SqlListener'
]
];
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
parent::boot();
//
}
}
给sql.log写入权限,执行相应程序会自动记录sql,也可以用tailf跟踪,不过要注意安全,这个放网上可能会暴露数据库结构