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程序员工具
May 26 PHP
php单件模式结合命令链模式使用说明
Sep 07 PHP
php getsiteurl()函数
Sep 05 PHP
php中日期加减法运算实现代码
Dec 08 PHP
深入php list()函数的详解
Jun 05 PHP
浅析php中三个等号(===)和两个等号(==)的区别
Aug 06 PHP
PHP 登录完成后如何跳转上一访问页面
Jan 14 PHP
PHP定时任务延缓执行的实现
Oct 08 PHP
php将数组存储为文本文件方法汇总
Oct 28 PHP
PHP生成制作验证码的简单实例
Jun 12 PHP
详解Yii2.0使用AR联表查询实例
Jun 16 PHP
PHP实现限制域名访问的实现代码(本地验证)
Sep 13 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文本操作类
2006/11/25 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
PHP二维数组的去重问题解析
2011/07/17 PHP
php安装swoole扩展的方法
2015/03/19 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
了解一点js的Eval函数
2012/07/26 Javascript
IE下window.onresize 多次调用与死循环bug处理方法介绍
2013/11/12 Javascript
JQuery学习总结【一】
2016/12/01 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
js实现图片360度旋转
2017/01/22 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
2020/10/22 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
Python get获取页面cookie代码实例
2018/09/12 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
使用html5 canvas绘制圆环动效
2019/06/03 HTML / CSS
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
连锁经营管理专业大学生求职信
2013/10/30 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
计算机软件专业求职信
2014/06/10 职场文书
2014酒店客房部工作总结
2014/12/16 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
护士医德医风心得体会
2016/01/25 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书