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的FTP学习(一)[转自奥索]
Oct 09 PHP
php的header和asp中的redirect比较
Oct 09 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
Jan 19 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
Jun 17 PHP
php获取数组长度的方法(有实例)
Oct 27 PHP
自己写的php curl库实现整站克隆功能
Feb 12 PHP
php创建多级目录的方法
Mar 24 PHP
PHP批量去除BOM头代码分享
Jun 26 PHP
浅析Yii2中GridView常见操作
Apr 22 PHP
PHP函数引用返回的实例详解
Sep 11 PHP
php结合redis高并发下发帖、发微博的实现方法
Dec 15 PHP
php对微信支付回调处理的方法
Aug 23 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数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
javascript 自定义事件初探
2009/08/21 Javascript
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
在Javascript中 声明时用"var"与不用"var"的区别
2013/04/15 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
JS类的定义与使用方法深入探索
2016/11/26 Javascript
Node.js使用NodeMailer发送邮件实例代码
2017/03/06 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
koa源码中promise的解读
2018/11/13 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
Python Numpy库安装与基本操作示例
2019/01/08 Python
如何在python中实现随机选择
2019/11/02 Python
GDAL 矢量属性数据修改方式(python)
2020/03/10 Python
分享一个python的aes加密代码
2020/12/22 Python
python实现简单猜单词游戏
2020/12/24 Python
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
META-INF文件夹中的MANIFEST.MF的作用
2016/06/21 面试题
大学生四个方面的自我评价
2013/09/19 职场文书
幼师求职自荐信范文
2014/01/26 职场文书
观看《永远的雷锋》心得体会
2014/03/12 职场文书
2014年妇女工作总结
2014/12/06 职场文书
可怜妈妈观后感
2015/06/09 职场文书
给numpy.array增加维度的超简单方法
2021/06/02 Python
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers