前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel框架自定义SQL日志记录

Laravel框架自定义SQL日志记录

作者头像
Mandy的名字被占用了
发布2019-09-29 16:19:26
1.3K0
发布2019-09-29 16:19:26
举报
文章被收录于专栏:菜鸟成长学习笔记

发现好多小伙伴调试代码时对 sql 打印不方便,特整理怎么实时在日志文件中打印所执行的 sql 语句

1、在 Listeners 目录新建 QueryListener.php 文件 代码如下:

代码语言:javascript
复制
<?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);
    }
}
2、在 Providers/EventServiceProvider.php 添加如下代码
代码语言:javascript
复制
<?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'
        ],
    ];
}
3、在 bootstrap/app.php 文件中开启 EventServiceProvider 注册即可
代码语言:javascript
复制
 $app->register(App\Providers\EventServiceProvider::class);
4、接下来写一个 sql 语句就能在 storage/logs/sql 看到生成的 sql 日志了
代码语言:javascript
复制
    app('db')->where('id', '>', '5')->get();
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卡二条的技术圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2、在 Providers/EventServiceProvider.php 添加如下代码
  • 3、在 bootstrap/app.php 文件中开启 EventServiceProvider 注册即可
  • 4、接下来写一个 sql 语句就能在 storage/logs/sql 看到生成的 sql 日志了
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档