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通过iconv将字符串从GBK转换为UTF8字符集
Jul 18 PHP
PHP性能优化 产生高度优化代码
Jul 22 PHP
php学习之function的用法
Jul 14 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
Jun 24 PHP
php实现的Cookies操作类实例
Sep 24 PHP
PHP实现的迷你漂流瓶
Jul 29 PHP
Zend Framework框架路由机制代码分析
Mar 22 PHP
基于PHP实现短信验证码接口(容联运通讯)
Sep 06 PHP
PHP中字符串长度的截取用法示例
Jan 12 PHP
PHP 中TP5 Request 请求对象的实例详解
Jul 31 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
Aug 19 PHP
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
Apr 01 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面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
2009/09/30 PHP
PHP遍历文件夹与文件类及处理类用法实例
2014/09/23 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
javascript动态修改Li节点值的方法
2015/01/20 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
Bootstrap CSS布局之图像
2016/12/17 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
2019/11/29 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
mac安装scrapy并创建项目的实例讲解
2018/06/13 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
2019/04/09 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
欧洲最大的化妆品连锁公司:Douglas道格拉斯
2017/05/06 全球购物
专业销售业务员求职信
2013/11/18 职场文书
网络管理专业求职信
2014/03/15 职场文书
销售经理岗位职责
2015/01/31 职场文书
驳回起诉裁定书
2015/05/19 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
Java设计模式中的命令模式
2022/04/28 Java/Android