Laravel给生产环境添加监听事件(SQL日志监听)


Posted in PHP onJune 19, 2017

本文主要给大家介绍的是关于Laravel给生产环境添加监听事件(SQL日志监听)的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:

laravel版本:5.2.*

一、创建监听器

php artisan make:listener QueryListener --event=Illuminate\\Database\\Events\\QueryExecuted

or

sudo /usr/local/bin/php artisan make:listener QueryListener --event=Illuminate\\Database\\Events\\QueryExecuted

会自动生成文件 app/Listeners/QueryListener.php

二、注册事件

打开 app/Providers/EventServiceProvider.php,在 $listen 中添加 Illuminate\Database\Events\QueryExecuted 事件的监听器为 QueryListener

protected $listen = [ 
 'Illuminate\Database\Events\QueryExecuted' => [
  'App\Listeners\QueryListener',
 ],
];

最终代码如下

namespace App\Providers;
use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
 /**
  * The event listener mappings for the application.
  *
  * @var array
  */
 protected $listen = [
  'App\Events\SomeEvent' => [
   'App\Listeners\EventListener',
  ],
  'Illuminate\Database\Events\QueryExecuted' => [
   'App\Listeners\QueryListener',
  ],
 ];
 /**
  * Register any other events for your application.
  *
  * @param \Illuminate\Contracts\Events\Dispatcher $events
  * @return void
  */
 public function boot(DispatcherContract $events)
 {
  parent::boot($events);
  //
 }
}

三、添加逻辑

打开 app/Listeners/QueryListener.php

光有一个空的监听器是不够的,我们需要自己实现如何把 $sql 记录到日志中。为此,对 QueryListener 进行改造,完善其 handle 方法如下:

$sql = str_replace("?", "'%s'", $event->sql);
$log = vsprintf($sql, $event->bindings);
Log::info($log);

最终代码如下

namespace App\Listeners;
use Log;
use Illuminate\Database\Events\QueryExecuted;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class QueryListener
{
 /**
  * Create the event listener.
  *
  * @return void
  */
 public function __construct()
 {
  //
 }
 /**
  * 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::info($log);
 }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
相对路径转化成绝对路径
Apr 10 PHP
php cookis创建实现代码
Mar 16 PHP
php 过滤危险html代码
Jun 29 PHP
PHP中删除变量时unset()和null的区别分析
Jan 27 PHP
windows环境下php配置memcache的具体操作步骤
Jun 09 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
Jun 25 PHP
搭建基于Docker的PHP开发环境的详细教程
Jul 01 PHP
PHP实现简单实用的验证码类
Jul 29 PHP
PHP读取大文件的多种方法介绍
Apr 04 PHP
PHP实现权限管理功能示例
Sep 22 PHP
基于PHP实现微信小程序客服消息功能
Aug 12 PHP
PHP实现计算器小功能
Aug 28 PHP
Yii 2.0自带的验证码使用经验分享
Jun 19 #PHP
PHP实现下载远程图片保存到本地的方法
Jun 19 #PHP
Yii2 如何在modules中添加验证码的方法
Jun 19 #PHP
PHP实现的简单操作SQLite数据库类与用法示例
Jun 19 #PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
Jun 19 #PHP
PHP利用Socket获取网站的SSL证书与公钥
Jun 18 #PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 #PHP
You might like
两个强悍的php 图像处理类1
2009/06/15 PHP
PHP 魔术函数使用说明
2010/05/14 PHP
8个PHP程序员常用的功能汇总
2014/12/18 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
php构造函数与析构函数
2016/04/23 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
jquery 操作DOM案例代码分享
2012/04/05 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
js时间戳格式化成日期格式的多种方法
2013/11/11 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
jQuery中parentsUntil()方法用法实例
2015/01/07 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
解决webpack打包速度慢的解决办法汇总
2017/07/06 Javascript
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
vue回到顶部监听滚动事件详解
2019/08/02 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
Python使用random.shuffle()打乱列表顺序的方法
2018/11/08 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
2020/02/29 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
工程预算与管理应届生求职信
2013/10/06 职场文书
高三自我鉴定怎么写
2013/10/19 职场文书
网络管理员岗位职责
2014/03/17 职场文书
专项法律服务方案
2014/06/11 职场文书
学校百日安全活动总结
2015/05/07 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
python opencv通过按键采集图片源码
2021/05/20 Python