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 相关文章推荐
openPNE常用方法分享
Nov 29 PHP
php中CI操作多个数据库的代码
Jul 05 PHP
php中autoload的用法总结
Nov 08 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 PHP
php随机取mysql记录方法小结
Dec 27 PHP
php静态文件返回304技巧分享
Jan 06 PHP
PHP技术开发微信公众平台
Jul 22 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
Centos PHP 扩展Xchche的安装教程
Jul 09 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
Aug 01 PHP
php实现评论回复删除功能
May 23 PHP
如何理解PHP核心特性命名空间
May 28 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+DBM的同学录程序(4)
2006/10/09 PHP
详解YII关联查询
2016/01/10 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
PHP判断是否是微信打开还是浏览器打开的方法
2019/02/27 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
在子窗口中关闭父窗口的一句代码
2013/10/21 Javascript
javascript操作excel生成报表全攻略
2014/05/04 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
python生成随机图形验证码详解
2017/11/08 Python
Python中turtle作图示例
2017/11/15 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
python中的句柄操作的方法示例
2019/06/20 Python
提高python代码运行效率的一些建议
2020/09/29 Python
python实现AdaBoost算法的示例
2020/10/03 Python
师范大学毕业自我鉴定
2013/11/21 职场文书
java设计模式--七大原则详解
2021/07/21 Java/Android
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
spring cloud eureka 服务启动失败的原因分析及解决方法
2022/03/17 Java/Android