首頁 >後端開發 >php教程 >如何使用Laravel框架實現的記錄SQL日誌功能

如何使用Laravel框架實現的記錄SQL日誌功能

不言
不言原創
2018-06-19 16:33:531935瀏覽

這篇文章主要介紹了Laravel框架實現的記錄SQL日誌功能,結合實例形式總結分析了Laravel框架監聽並記錄SQL相關操作技巧與注意事項,需要的朋友可以參考下

本文實例講述了Laravel框架實現的記錄SQL日誌功能。分享給大家供大家參考,具體如下:

在專案開發過程中或是效能最佳化中,常常會有要查看執行sql的情況,然而Laravel日誌預設不會記錄執行sql。還好留有相關接口,我們可以很方便的就是想SQl日誌功能。

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

protected $listen = [
  'App\Events\Event' => [
    'App\Listeners\EventListener',
  ],
  // 新增SqlListener监听QueryExecuted
  'Illuminate\Database\Events\QueryExecuted' => [
    'App\Listeners\SqlListener',
  ],
];

##新SqlListener監聽器

方法1,手動創建,在App\Listeners\SqlListener.php 文件,內容如下

namespace App\Listeners;
use Illuminate\Database\Events\QueryExecuted;
class SqlListener {
  /**
   * Create the event listener.
   *
   * @return void
   */
  public function __construct() {
    //
  }
  /**
   * Handle the event.
   *
   * @param =QueryExecuted $event
   * @return void
   */
  public function handle(QueryExecuted $event) {
    // 在这里编写业务逻辑
  }
}

方法2,使用命令列創建,命令如下

// 该命令必须在项目跟目录下执行,因为项目跟目录下才有artisan文件。
// 该命令可以自动创建SqlListener文件,但是QueryExecuted这个类的导入可能会有点问题,自己改下。

> php artisan make:listener SqlListener -e=QueryExecuted

在handle方法中編寫記錄sql的業務邏輯,如:


/**
 * 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 = '[' . date('Y-m-d H:i:s') . '] ' . $log . "\r\n";
  $filepath = storage_path('logs\sql.log');
  file_put_contents($filepath, $log, FILE_APPEND);
  // 这里也可以直接用Log::info() 里的函数,只是这样会和其他调试信息掺在一起。
  // 如果要用Log里的函数,别忘记了引入Log类。
}

#以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

對於Laravel框架模板載入與分配變數及簡單路由的功能

如何解決Laravel中log無法寫入的問題

以上是如何使用Laravel框架實現的記錄SQL日誌功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn