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 相关文章推荐
攻克CakePHP系列三 表单数据增删改
Oct 22 PHP
PHP 解决utf-8和gb2312编码转换问题
Mar 18 PHP
解析百度搜索结果link?url=参数分析 (全)
Oct 09 PHP
2个比较经典的PHP加密解密函数分享
Jul 01 PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 PHP
thinkphp四种url访问方式详解
Nov 28 PHP
Codeigniter检测表单post数据的方法
Mar 21 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
May 06 PHP
CI框架常用方法小结
May 17 PHP
PHP判断表达式中括号是否匹配的简单实例
Oct 22 PHP
使用vs code编辑调试php配置的方法
Jan 29 PHP
PHP实现简易用户登录系统
Jul 10 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 ios推送(代码)
2013/07/01 PHP
php多任务程序实例解析
2014/07/19 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
用dom+xhtml+css制作的一个相册效果代码打包下载
2008/01/24 Javascript
jquery 的 $("#id").html() 无内容的解决方法
2010/06/07 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
JS动态添加iframe的代码
2015/09/14 Javascript
jquery实现图片预加载
2015/12/25 Javascript
bootstrap table实例详解
2017/01/06 Javascript
初探nodeJS
2017/01/24 NodeJs
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
2017/08/17 Javascript
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
原生JS实现汇率转换功能代码实例
2020/05/13 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
使用Python从有道词典网页获取单词翻译
2016/07/03 Python
Python 爬虫多线程详解及实例代码
2016/10/08 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
python实现从wind导入数据
2019/12/03 Python
python实现吃苹果小游戏
2020/03/21 Python
使用python实现CGI环境搭建过程解析
2020/04/28 Python
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
C语言笔试集
2012/07/24 面试题
海量信息软件测试笔试题
2015/08/08 面试题
Java基础类库面试题
2013/09/04 面试题
求职自荐信的格式
2014/04/07 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书