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 Mssql操作简单封装支持存储过程
Dec 11 PHP
两个开源的Php输出Excel文件类
Feb 08 PHP
PHP操作Memcache实例介绍
Jun 14 PHP
CodeIgniter使用phpcms模板引擎
Nov 12 PHP
PHP aes (ecb)解密后乱码问题
Jun 22 PHP
ThinkPHP框架里隐藏index.php
Apr 12 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
May 17 PHP
CodeIgniter常用知识点小结
May 26 PHP
PHP页面输出搜索后跳转下一页的处理方法
Sep 30 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
基于PHP实现用户在线状态检测
Nov 10 PHP
php TP5框架生成二维码链接
Apr 01 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 如何向 MySQL 发送数据
2006/10/09 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
基于PHP静态类的原罪详解
2013/05/06 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
JSON+Jquery省市区三级联动
2016/01/13 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
Django中的CACHE_BACKEND参数和站点级Cache设置
2015/07/23 Python
Django restframework 源码分析之认证详解
2019/02/22 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
J2EE模式面试题
2016/10/11 面试题
小学校长竞聘演讲稿
2014/05/16 职场文书
求职信内容怎么写
2014/05/26 职场文书
护理专业自荐书
2014/06/04 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers
vue 自定义组件添加原生事件
2022/04/21 Vue.js