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的存储过程
Oct 09 PHP
如何做到多笔资料的同步
Oct 09 PHP
PHP下打开URL地址的几种方法小结
May 16 PHP
php使用curl发送json格式数据实例
Dec 17 PHP
利用中国天气预报接口实现简单天气预报
Jan 20 PHP
分享一个超好用的php header下载函数
Jan 31 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
Jun 26 PHP
PHP中substr()与explode()函数用法分析
Nov 24 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
php基于dom实现读取图书xml格式数据的方法
Feb 03 PHP
PHP巧妙利用位运算实现网站权限管理的方法
Mar 12 PHP
实例讲解PHP表单处理
Feb 15 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
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
splice slice区别
2006/10/09 Javascript
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
在Node.js中使用HTTP上传文件的方法
2015/06/23 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
对javascript继承的理解
2016/10/11 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
[51:17]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第二场 10月30日
2020/10/31 DOTA
python采用getopt解析命令行输入参数实例
2014/09/30 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
python ChainMap的使用和说明详解
2019/06/11 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
Python Selenium库的基本使用教程
2021/01/04 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
ECCO爱步官方旗舰店:丹麦鞋履品牌
2018/01/02 全球购物
坚定理想信念心得体会
2014/03/11 职场文书
五一劳动节活动记录
2014/03/23 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
2015年学校财务工作总结
2015/05/19 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书