Comment utiliser la fonction de journalisation SQL implémentée par le framework Laravel

不言
Libérer: 2023-04-01 14:40:01
original
1904 Les gens l'ont consulté

Cet article présente principalement la fonction de journalisation SQL implémentée par le framework Laravel. Il résume et analyse les techniques de surveillance et d'enregistrement du framework Laravel et les précautions d'exploitation liées à SQL sous forme d'exemples. >

L'exemple décrit la fonction de journalisation SQL implémentée par le framework Laravel. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Lors du développement d'un projet ou de l'optimisation des performances, il est souvent nécessaire de vérifier l'exécution de SQL. Cependant, les journaux Laravel n'enregistrent pas l'exécution de SQL par. défaut. Heureusement, il existe des interfaces pertinentes, et on peut facilement utiliser la fonction de journalisation SQL.

Ajoutez ce qui suit à $listen dans

AppProvidersEventServiceProvider:class

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

Nouvel écouteur SqlListener

Méthode 1, créée manuellement, dans le fichier AppListenersSqlListener.php , le contenu est le suivant

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) {
    // 在这里编写业务逻辑
  }
}
Copier après la connexion

Méthode 2, créée à l'aide de la ligne de commande, la commande est la suivante

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

> php artisan make:listener SqlListener -e=QueryExecuted
Copier après la connexion

Écrire la logique métier de l'enregistrement SQL dans la méthode handle, Tel que :


/**
 * 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类。
}
Copier après la connexion

Ce qui précède est l'intégralité du contenu de cet article. j'espère que cela sera utile à l'étude de tout le monde. Plus Veuillez faire attention au site Web PHP chinois pour le contenu connexe !

Recommandations associées :

Pour les fonctions du modèle de framework Laravel, chargement et attribution de variables et routage simple

Comment résoudre le problème dans Laravel Problème selon lequel le journal ne peut pas être écrit

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal