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
分页详解 从此分页无忧(PHP+mysql)
Nov 23 PHP
php开发过程中关于继承的使用方法分享
Jun 17 PHP
PHP的基本常识小结
Jul 05 PHP
PHP mysql与mysqli事务使用说明 分享
Aug 17 PHP
ThinkPHP模版引擎之变量输出详解
Dec 05 PHP
php继承中方法重载(覆盖)的应用场合
Feb 09 PHP
php基于websocket搭建简易聊天室实践
Oct 24 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
php读取本地json文件的实例
Mar 07 PHP
PHP一致性hash分布式算法封装类定义与用法示例
Aug 04 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
Sep 29 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下关于中英数字混排的字符串分割问题
2010/04/06 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
2017/03/28 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
javascript 面向对象编程基础:封装
2009/08/21 Javascript
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
node.js插件nodeclipse安装图文教程
2020/10/19 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
Python类反射机制使用实例解析
2019/12/30 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
演讲稿的写法
2014/05/19 职场文书
社区平安建设方案
2014/05/25 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
导游词之包公祠
2019/11/25 职场文书
mongodb的安装和开机自启动详细讲解
2021/08/02 MongoDB
利用 Python 的 Pandas和 NumPy 库来清理数据
2022/04/13 Python
Java版 单机五子棋
2022/05/04 Java/Android