当前位置:首页 > CMS教程 > 其它CMS > 列表

Laravel框架实现的记录SQL日志功能示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-10-05 10:23:10 浏览: 评论:0 

这篇文章主要介绍了Laravel框架实现的记录SQL日志功能,结合实例形式总结分析了Laravel框架监听并记录SQL相关操作技巧与注意事项,需要的朋友可以参考下。

本文实例讲述了Laravel框架实现的记录SQL日志功能,分享给大家供大家参考,具体如下:

在项目开发过程中或者是性能优化中,经常会有要查看执行sql的情况,然而Laravel日志默认不记录执行sql,好在留有相关接口,我们可以很方便的就是想SQl日志功能。

在 App\Providers\EventServiceProvider:class 中的$listen中新增如下

  1. protected $listen = [ 
  2.   'App\Events\Event' => [ 
  3.     'App\Listeners\EventListener'
  4.   ], 
  5.   // 新增SqlListener监听QueryExecuted 
  6.   'Illuminate\Database\Events\QueryExecuted' => [ 
  7.     'App\Listeners\SqlListener'
  8.   ], 
  9. ]; 

新建SqlListener监听器

方法1,手动创建,在App\Listeners\SqlListener.php 文件,内容如下

  1. namespace App\Listeners; 
  2. use Illuminate\Database\Events\QueryExecuted; 
  3. class SqlListener { 
  4.   /** 
  5.    * Create the event listener. 
  6.    * 
  7.    * @return void 
  8.    */ 
  9.   public function __construct() { 
  10.     // 
  11.   } 
  12.   /** 
  13.    * Handle the event. 
  14.    * 
  15.    * @param =QueryExecuted $event 
  16.    * @return void 
  17.    */ 
  18.   public function handle(QueryExecuted $event) { 
  19.     // 在这里编写业务逻辑 
  20.   } 

方法2,使用命令行创建,命令如下

该命令必须在项目跟目录下执行,因为项目跟目录下才有artisan文件。

该命令可以自动创建SqlListener文件,但是QueryExecuted这个类的导入可能会有点问题,自己改下。

> php artisan make:listener SqlListener -e=QueryExecuted

在handle方法中编写记录sql的业务逻辑,如:

  1. /** 
  2.  * Handle the event. 
  3.  * 
  4.  * @param =QueryExecuted $event 
  5.  * @return void 
  6.  */ 
  7. public function handle(QueryExecuted $event) { 
  8.   $sql = str_replace("?""'%s'"$event->sql); 
  9.   $log = vsprintf($sql$event->bindings); 
  10.   $log = '[' . date('Y-m-d H:i:s') . '] ' . $log . "\r\n"
  11.   $filepath = storage_path('logs\sql.log'); 
  12.   file_put_contents($filepath$log, FILE_APPEND); 
  13.   // 这里也可以直接用Log::info() 里的函数,只是这样会和其他调试信息掺在一起。 
  14.   // 如果要用Log里的函数,别忘记了引入Log类。 
  15. }

Tags: Laravel SQL日志

分享到: