记录 SQL 日志

未匹配的标注

原文地址

  1. Listeners 目录新建 QueryListener.php 文件 代码如下:
<?php
namespace App\Listeners;

use Illuminate\Database\Events\QueryExecuted;

class QueryListener
{
    public function handle(QueryExecuted $event)
    {
        if (env('APP_ENV', 'production') == 'local') {
            $sql = str_replace('?', "'%s'", $event->sql);
            $log = vsprintf($sql, $event->bindings);
            $this->put_log('sql', $log);
        }
    }

    private function put_log($file = 'app', $content = '')
    {
        $data = date('Y-m-d');
        $cut_line = str_repeat("-", 100);
        is_dir(storage_path('logs/sql')) or mkdir (storage_path('logs/sql'), 0777, true); // 文件夹不存在则创建
        $content = '[' . date('Y-m-d H:i:s') . "]" . $content;
        @file_put_contents(storage_path('logs/sql/' . $file . '-' . $data . '.log'), $content . "\n" . $cut_line . "\n\n", FILE_APPEND);
    }
}
  1. Providers/EventServiceProvider.php 添加如下代码

    <?php
    namespace App\Providers;
    use Laravel\Lumen\Providers\EventServiceProvider as ServiceProvider;
    class EventServiceProvider extends ServiceProvider
    {
     /**
      * The event listener mappings for the application.
      *
      * @var array
      */
     protected $listen = [
    
         'Illuminate\Database\Events\QueryExecuted' => [
             'App\Listeners\QueryListener'
         ],
     ];
    }
  2. bootstrap/app.php 文件中开启 EventServiceProvider 注册即可

    $app->register(App\Providers\EventServiceProvider::class);
  3. 接下来写一个 sql 语句就能在 storage/logs/sql 看到生成的 sql 日志了

     app('db')->where('id', '>', '5')->get();

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
秦晓武
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~