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
QueryPath PHP 中的jQuery
Apr 11 PHP
php HtmlReplace输入过滤安全函数
Jul 03 PHP
PHP 显示客户端IP与服务器IP的代码
Oct 12 PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 PHP
php实例分享之html转为rtf格式
Jun 02 PHP
php使用fputcsv()函数csv文件读写数据的方法
Jan 06 PHP
PHP实现移除数组中为空或为某值元素的方法
Jan 07 PHP
PHP基于DOMDocument解析和生成xml的方法分析
Jul 17 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
php 算法之实现相对路径的实例
Oct 17 PHP
Yii框架Session与Cookie使用方法示例
Oct 14 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
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
网上抓的一个特效
2007/05/11 Javascript
jquery ajax执行后台方法
2010/03/18 Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
DVA框架统一处理所有页面的loading状态
2017/08/25 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
React 使用browserHistory项目访问404问题解决
2018/06/01 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
基于python实现百度翻译功能
2019/05/09 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
用Python进行websocket接口测试
2020/10/16 Python
GLAMGLOW格莱魅美国官网:美国知名的面膜品牌
2016/12/31 全球购物
武汉瑞得软件笔试题
2015/10/27 面试题
中软国际Java程序员机试题
2012/08/19 面试题
学生发电厂实习自我鉴定
2013/09/22 职场文书
毕业生找工作推荐信
2013/11/21 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
消防工作实施方案
2014/06/09 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
大学生考试作弊检讨书1000字
2014/10/14 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书