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 相关文章推荐
PHPWind 发帖回帖Api PHP版打包下载
Feb 08 PHP
PHP之数组学习
May 29 PHP
php遍历所有文件及文件夹的方法深入解析
Jun 08 PHP
浅谈php7的重大新特性
Oct 23 PHP
PHP Yii框架之表单验证规则大全
Nov 16 PHP
ZF框架实现发送邮件的方法
Dec 03 PHP
php 生成Tab键或逗号分隔的CSV
Sep 24 PHP
深入了解PHP中的Array数组和foreach
Nov 06 PHP
Python中使用django form表单验证的方法
Jan 16 PHP
Yii2.0 RESTful API 基础配置教程详解
Dec 26 PHP
laravel 执行迁移回滚示例
Oct 23 PHP
laravel框架中视图的基本使用方法分析
Nov 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
基于mysql的论坛(6)
2006/10/09 PHP
PHP 文件上传全攻略
2010/04/28 PHP
php读取本地文件常用函数(fopen与file_get_contents)
2013/09/09 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
调试php程序的简单步骤
2019/10/04 PHP
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
jquery获取自定义属性(attr和prop)实例介绍
2013/04/21 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
详解webpack中的hash、chunkhash、contenthash区别
2018/01/05 Javascript
angular学习之动态创建表单的方法
2018/12/07 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python实现的递归神经网络简单示例
2017/08/11 Python
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
美国球迷装备的第一来源:FOCO
2020/07/03 全球购物
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
顺丰快递Java软件工程师面试题
2015/07/31 面试题
服务中心夜班服务员岗位职责
2013/11/27 职场文书
安全生产网格化管理实施方案
2014/03/01 职场文书
自我查摆剖析材料
2014/10/11 职场文书
教师三严三实心得体会
2014/10/11 职场文书