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 相关文章推荐
如何过滤高亮显示非法字符
Oct 09 PHP
Windows中安装Apache2和PHP4权威指南
Nov 18 PHP
dedecms后台验证码总提示错误的解决方法
Mar 21 PHP
使用 MySQL Date/Time 类型
Mar 26 PHP
PHP获取MAC地址的具体实例
Dec 13 PHP
zf框架的zend_cache缓存使用方法(zend框架)
Mar 14 PHP
ubuntu下配置nginx+php+mysql详解
Sep 10 PHP
PHP+redis实现添加处理投票的方法
Nov 14 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
PHP入门教程之面向对象基本概念实例分析
Sep 11 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
Oct 28 PHP
PHP HTTP 认证实例详解
Nov 03 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
浅析Mysql 数据回滚错误的解决方法
2013/08/05 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
PHP在linux上执行外部命令的方法
2017/02/06 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
php封装实现钉钉机器人报警接口的示例代码
2020/08/08 PHP
JavaScript Sort 表格排序
2009/10/31 Javascript
js 未结束的字符串常量错误解决方法
2010/06/13 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
Bootstrap实现下拉菜单效果
2016/04/29 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
详解Angular6.0使用路由步骤(共7步)
2018/06/29 Javascript
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
在ironpython中利用装饰器执行SQL操作的例子
2015/05/02 Python
python字符类型的一些方法小结
2016/05/16 Python
python中的for循环
2018/09/28 Python
selenium+python环境配置教程详解
2019/05/28 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
PyCharm使用之配置SSH Interpreter的方法步骤
2019/12/26 Python
python3的pip路径在哪
2020/06/23 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
实用求职信范文分享
2013/12/25 职场文书
上学迟到的检讨书
2014/01/11 职场文书
校本研修个人总结
2015/02/28 职场文书
车间统计员岗位职责
2015/04/14 职场文书
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python