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新手上路(七)
Oct 09 PHP
使PHP自定义函数返回多个值
Nov 26 PHP
php中cookie的作用域
Mar 27 PHP
PHP递归算法的详细示例分析
Feb 19 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
May 27 PHP
php实现查询百度google收录情况(示例代码)
Aug 02 PHP
Codeigniter实现多文件上传并创建多个缩略图
Jun 12 PHP
CodeIgniter中实现泛域名解析
Jul 19 PHP
php自定义hash函数实例
May 05 PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 PHP
php+mysql实现的无限分类方法类定义与使用示例
May 27 PHP
Yii使用DbTarget实现日志功能的示例代码
Jul 21 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
收音机的保养
2021/03/01 无线电
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
2011/07/01 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
细说javascript函数从函数的构成开始
2013/08/29 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
[03:07]2015国际邀请赛选手档案EHOME.rOtK 是什么让他落泪?
2015/07/31 DOTA
python实现的阳历转阴历(农历)算法
2014/04/25 Python
python之wxPython应用实例
2014/09/28 Python
python中根据字符串调用函数的实现方法
2016/06/12 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
Python3使用tesserocr识别字母数字验证码的实现
2021/01/29 Python
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
机电一体化毕业生求职信
2013/11/02 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
2015年度班主任自我评价
2015/03/11 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书
企业管理不到位检讨书
2019/06/27 职场文书
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL
Web应用开发TypeScript使用详解
2022/05/25 Javascript