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 相关文章推荐
PHP 和 MySQL 开发的 8 个技巧
Jan 02 PHP
关于mysql 字段的那个点为是定界符
Jan 15 PHP
CakePHP去除默认显示的标题及图标的方法
Oct 22 PHP
php二分查找二种实现示例
Mar 12 PHP
PHP针对JSON操作实例分析
Jan 12 PHP
PHP框架Laravel的小技巧两则
Feb 10 PHP
thinkPHP数据库增删改查操作方法实例详解
Dec 06 PHP
简单实现PHP留言板功能
Dec 21 PHP
php PDO实现的事务回滚示例
Mar 23 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
购物车实现的几种方式优缺点对比
May 02 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 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
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
2015/12/18 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
微信小程序自定义联系人弹窗
2020/05/26 Javascript
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
Python的多态性实例分析
2015/07/07 Python
定制FileField中的上传文件名称实例
2017/08/23 Python
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
Shopee印度尼西亚:东南亚与台湾市场最大电商平台
2018/06/17 全球购物
佳能法国商店:Canon法国
2019/02/14 全球购物
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
Linux的文件类型
2016/07/05 面试题
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
园林施工员岗位职责
2013/12/11 职场文书
2014年百日安全生产活动总结
2014/05/04 职场文书
2014年防汛工作总结
2014/12/08 职场文书
教师党员个人总结
2015/02/10 职场文书
论文致谢词范文
2015/05/14 职场文书
2015年机关党建工作总结
2015/05/22 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫
Python安装使用Scrapy框架
2022/04/12 Python