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 相关文章推荐
php引用计数器进行垃圾收集机制介绍
Sep 19 PHP
php存储过程调用实例代码
Feb 03 PHP
PHP中的替代语法简介
Aug 22 PHP
set_exception_handler函数在ThinkPHP中的用法
Oct 31 PHP
php上传中文文件名乱码问题处理方案
Feb 03 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
Dec 20 PHP
PHP简单实现无限级分类的方法
May 13 PHP
Yii2实现自定义独立验证器的方法
May 05 PHP
PHP编译configure时常见错误的总结
Aug 17 PHP
PHP实现打包下载文件的方法示例
Oct 07 PHP
php微信公众号开发之校园图书馆
Oct 20 PHP
关于PHP数组迭代器的使用方法实例
Nov 17 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
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
php中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
2010/03/27 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
xml和web特殊字符
2009/04/28 Javascript
javascript图像处理—仿射变换深度理解
2013/01/16 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
node.js中的path.dirname方法使用说明
2014/12/09 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
2015/12/24 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
2016/03/30 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
JS产生随机数的用法小结
2016/12/10 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
jQuery事件详解
2017/02/23 Javascript
基于Vue实现拖拽功能
2020/07/29 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
JS/CSS实现字符串单词首字母大写功能
2019/09/03 Javascript
vue-resource:jsonp请求百度搜索的接口示例
2019/11/09 Javascript
Python创建文件和追加文件内容实例
2014/10/21 Python
Python中join函数简单代码示例
2018/01/09 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
Python 找出出现次数超过数组长度一半的元素实例
2020/05/11 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
CSS3实现酷炫的3D旋转透视效果
2019/11/21 HTML / CSS
汽车检测与维修应届毕业生求职信
2013/10/19 职场文书
装修设计师求职信
2014/02/26 职场文书
西式结婚主持词
2014/03/14 职场文书
未婚证明范本
2015/06/15 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers