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新手用的Insert和Update语句构造类
Mar 31 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
May 13 PHP
探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
Jun 24 PHP
php二维数组排序方法(array_multisort usort)
Dec 25 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
ThinkPHP中limit()使用方法详解
Apr 19 PHP
分析PHP中单双引号的误区和双引号小隐患
Jul 19 PHP
php版微信返回用户text输入的方法
Nov 14 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
Nov 25 PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
php往mysql中批量插入数据实例教程
Dec 12 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
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
PHP中如何使用session实现保存用户登录信息
2015/10/20 PHP
php获取网站根目录物理路径的几种方法(推荐)
2017/03/04 PHP
FLASH 广告之外的链接
2008/12/16 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
2012/03/01 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
浅析javascript函数表达式
2016/02/10 Javascript
Bootstrap组件(一)之菜单
2016/05/11 Javascript
JavaScript必知必会(十) call apply bind的用法说明
2016/06/08 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
Bootstrap表单使用方法详解
2017/02/17 Javascript
php输出全部gb2312编码内的汉字方法
2017/03/04 Javascript
基于 webpack2 实现的多入口项目脚手架详解
2017/06/26 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
跟老齐学Python之dict()的操作方法
2014/09/24 Python
Python fileinput模块使用实例
2015/05/28 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
浅谈python3中input输入的使用
2019/08/02 Python
Python time库基本使用方法分析
2019/12/13 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
python能自学吗
2020/06/18 Python
Python3使用 GitLab API 进行批量合并分支
2020/10/15 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
英国最大的在线蜡烛商店:Candles Direct
2019/03/26 全球购物
构建高效课堂实施方案
2014/03/13 职场文书
小学生寒假家长评语
2014/04/16 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
大学生求职自荐信
2015/03/24 职场文书
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS