Laravel 配置 SqlDebug 服务,进行实时监听打印 SQL
0:释义
什么是服务容器
简而言之,Laravel 服务容器 是一个用于存储绑定组件的盒子,它还会为应用提供所需的服务。
Laravel 服务容器是用于管理类的依赖和执行依赖注入的工具,By Laravel 文档。
什么是服务提供者
如果说服务容器是提供绑定和依赖注入的的工具,那么 服务提供者 则是实现绑定的工具。
1:自定义服务提供者
php artisan make:provider SqlDebugServiceProvider
# Explanation:
# SqlDebugServiceProvider 自定义服务提供者的名字
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class SqlDebugServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     * register 方法用于执行服务绑定处理
     *
     * @return void
     */
    public function register()
    {
        //
    }
    /**
     * Bootstrap services.
     * 可以使用所有已绑定的服务
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}
2:注册自定义服务提供者
为了完成注册服务提供者的功能,仅需要将类名加入到 config/app.php 配置文件的 providers 节点。
    'providers' => [
        /*
         * Application Service Providers...
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
        /**
         * SQL 监听服务
         */
        App\Providers\SqlDebugServiceProvider::class,
    ],
3: 在 中 boot 方法中增加 SQL 监听服务
\DB::listen(function ($query) {
    $tmp = str_replace('?', '"' . '%s' . '"', $query->sql);
    $qBindings = [];
    foreach ($query->bindings as $key => $value) {
        if (is_numeric($key)) {
            $qBindings[] = $value;
        } else {
            $tmp = str_replace(':' . $key, '"' . $value . '"', $tmp);
        }
    }
    $tmp = vsprintf($tmp, $qBindings);
    $tmp = str_replace("\\", "", $tmp);
    \Log::debug('[execution time: ' . $query->time . 'ms] ' . $tmp);
});
4: 会发现在 /storage/logs/ 目录下生成对应的 SQL 文件
Laravel 配置 SqlDebug 服务,进行实时监听打印 SQL的更多相关文章
- 20180530利用Maxwell组件实时监听Mysql的binlog日志
		转自:https://blog.csdn.net/qq_30921461/article/details/78320750 http://kafka.apache.org/quickstart htt ... 
- Android实时监听网络状态
		Android实时监听网络状态(1) 其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就 ... 
- Android几行代码实现实时监听微信聊天
		实现效果: 实时监听当前聊天页面的最新一条消息,如图: 实现原理: 同样是利用AccessibilityService辅助服务,关于这个服务类还不了解的同学可以先看下我上一篇关于 ... 
- js 实时监听input中值变化
		注意:用到了jquery需要引入jquery.min.js. 需求: 1.每个地方需要分别打分,总分为100; 2.第一个打分总分为40; 3.第二个打分总分为60. 注意:需要判断null.&quo ... 
- 移动端用js与jquery实时监听输入框值的改动
		背景: 在一次移动端H5开发中,需要监听输入框值的实时变动. onchange事件肯定抛弃,因为只能失去焦点才触发. 而keyPress在Android可以触发,iOS不可以. 又不想用Android ... 
- javascript --- 实时监听输入框值的变化
		实时监听文本框值变化是非常常见的功能,通常最简单的办法就是用keyup,keydown来实现,但是这种方法有两个问题,一个是当直接复制粘贴的时候没法监听到事件,另外一个问题是在移动端,使用删除键删除输 ... 
- 实时监听输入框值变化的完美方案:oninput & onpropertychange
		实时监听输入框值变化的完美方案:oninput & onpropertychange: 网址:http://www.cnblogs.com/lhb25/archive/2012/11/30/o ... 
- input实时监听(input oninput propertychange onpropertychange)
		本文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时 ... 
- js与jquery实时监听输入框值变化方法
		本文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时 ... 
随机推荐
- Spring Cloud Alibaba基础教程:Sentinel Dashboard中修改规则同步到Apollo
			在之前的两篇教程中我们分别介绍了如何将Sentinel的限流规则存储到Nacos和Apollo中.同时,在文末的思考中,我都指出了这两套整合方案都存在一个不足之处:不论采用什么配置中心,限流规则都只能 ... 
- js element类型的属性和方法整理
			Element类型 除了Document类型,我们Web编程中最常用的类型就是Element类型啦.Element 类型用于表现XML或HTML元素,提供了对元素标签名,子节点,特性的访问 特征 no ... 
- CSS让一个图片显示在另一个图片上面
			思路,在两个图片的父元素上设置 position:relative , 然后给小图片设置 position:absolute ,位置通过top,bottom,left,right来修改,然后用 ... 
- 关于C++命名空间namespace的理解与使用介绍
			0X00 前言 所谓namespace,是指标识符的各种可见范围.C++标准程序库中的所有标识符都被定义于一个名为std的namespace中. 0x01 与C语言区别 <iostream> ... 
- like's photos
			wallhaven官网 
- SpringBoot+Mybatis一级缓存和二级缓存详解
			本文主要介绍在SpringBoot项目中如何使用Mybatis的一级.二级缓存,为了演示方便,本文的数据库采用H2内存数据库,数据库连接池默认使用SpringBoot2.X自带的hikariCP. 正 ... 
- redux中的reducer为什么必须(最好)是纯函数
			为什么reducer最好是纯函数? 首先你得看看文档怎么说reducer的作用的,‘接收旧的 state 和 action,返回新的 state’,他起的是一个对数据做简单处理后返回state的作用. ... 
- 武汉百得思维Java面试总结
			武汉百得思维Java面试总结 在一个愉快的下午,我们并不十分愉快地参加了宣讲会.那是国庆的前两天,大家正在为放假的愉悦所兴奋也在为找工作而紧张. 在听过一阵胡吹乱侃之后,大家都昏昏欲睡,于是终于迎来了 ... 
- matlab中的静态变量与全局变量
			matlab中的静态变量和全局变量 1.静态变量 在matlab中,和其他语言一样,函数中的变量一把都是局部变量,也就是说,在函数调用完毕后,变量就会被释放.但是有些时候回希望上次改变的变量在下一次调 ... 
- JVM垃圾回收(五)
			低延迟垃圾收集器 衡量垃圾收集器的三项最重要的指标是: 内存占用(Footprint).吞吐量(Throughput)和延迟(Latency).三者总体的表现会随技术进步而越来越好,但是要在这三个方面 ... 
