So verwenden Sie die vom Laravel-Framework implementierte SQL-Protokollierungsfunktion

不言
Freigeben: 2023-04-01 14:40:01
Original
1904 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich die vom Laravel-Framework implementierte SQL-Protokollierungsfunktion vorgestellt. Er fasst die Überwachungs- und Aufzeichnungstechniken und Vorsichtsmaßnahmen des Laravel-Frameworks in Form von Beispielen zusammen >

Das Beispiel beschreibt die vom Laravel-Framework implementierte SQL-Protokollierungsfunktion. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Während der Projektentwicklung oder Leistungsoptimierung ist es häufig erforderlich, die Ausführung von SQL zu überprüfen. Laravel-Protokolle zeichnen die Ausführung von SQL jedoch nicht auf Standard. Glücklicherweise gibt es relevante Schnittstellen und wir können die SQL-Protokollierungsfunktion problemlos verwenden.

Fügen Sie Folgendes zu $listen in

AppProvidersEventServiceProvider:class wie folgt hinzu

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

Neuer SqlListener-Listener

Methode 1, manuell erstellt, in der Datei AppListenersSqlListener.php lautet der Inhalt wie folgt

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) {
    // 在这里编写业务逻辑
  }
}
Nach dem Login kopieren

Methode 2, erstellt über die Befehlszeile, der Befehl lautet wie folgt

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

> php artisan make:listener SqlListener -e=QueryExecuted
Nach dem Login kopieren

Schreiben Sie die Geschäftslogik zum Aufzeichnen von SQL in das Handle Methode, wie zum Beispiel:


/**
 * 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类。
}
Nach dem Login kopieren

Das Obige ist der gesamte Inhalt dieses Artikels Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website!

Verwandte Empfehlungen:

Für die Funktionen des Laravel-Framework-Vorlagenladens und -Zuweisens von Variablen und einfaches Routing

So lösen Sie Das Problem in Laravel Problem, dass das Protokoll nicht geschrieben werden kann

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die vom Laravel-Framework implementierte SQL-Protokollierungsfunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage