Laravel框架实现的记录SQL日志功能示例


Posted in PHP onJune 19, 2018

本文实例讲述了Laravel框架实现的记录SQL日志功能。分享给大家供大家参考,具体如下:

在项目开发过程中或者是性能优化中,经常会有要查看执行sql的情况,然而Laravel日志默认不记录执行sql。好在留有相关接口,我们可以很方便的就是想SQl日志功能。

App\Providers\EventServiceProvider:class 中的$listen中新增如下

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

新建SqlListener监听器

方法1,手动创建,在App\Listeners\SqlListener.php 文件,内容如下

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

方法2,使用命令行创建,命令如下

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

> php artisan make:listener SqlListener -e=QueryExecuted

在handle方法中编写记录sql的业务逻辑,如:

/**
 * 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类。
}

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
建立动态的WML站点(三)
Oct 09 PHP
分享PHP入门的学习方法
Jan 02 PHP
PHP 类商品秒杀计时实现代码
May 05 PHP
php中定时计划任务的实现原理
Jan 08 PHP
JavaScript创建命名空间的5种写法
Jun 24 PHP
php表单提交与$_POST实例分析
Jan 26 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
Nov 10 PHP
支付宝服务窗API接口开发php版本
Jul 20 PHP
PHP实现一维数组与二维数组去重功能示例
May 24 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
ThinkPHP5.1验证码功能实现的示例代码
Jun 08 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
Jun 19 #PHP
总结PHP代码规范、流程规范、git规范
Jun 18 #PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 #PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 #PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 #PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 #PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 #PHP
You might like
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
php检查是否是ajax请求的方法
2015/04/16 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
2020/05/29 PHP
js中关于String对象的replace使用详解
2011/05/24 Javascript
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
原生JS实现不断变化的标签
2017/05/22 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
angular4应用中输入的最小值和最大值的方法
2019/05/17 Javascript
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
Python Requests 基础入门
2016/04/07 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
如何从csv文件构建Tensorflow的数据集
2020/09/21 Python
实习医生自我评价
2013/09/22 职场文书
毕业自我鉴定范文
2013/11/06 职场文书
绝对经典成功的大学生推荐信
2013/11/08 职场文书
美国探亲签证邀请信
2014/02/05 职场文书
交通事故协议书
2014/04/15 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
颐和园的导游词
2015/01/30 职场文书
2015年财务部工作总结
2015/04/10 职场文书
结婚仪式主持词
2015/06/29 职场文书
2016年班主任培训心得体会
2016/01/07 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
PHP中strval()函数实例用法
2021/06/07 PHP
Python基于百度AI实现抓取表情包
2021/06/27 Python
Redis命令处理过程源码解析
2022/02/12 Redis