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 empty函数判断mysql表单是否为空
Apr 12 PHP
探讨方法的重写(覆载)详解
Jun 08 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
Aug 21 PHP
ThinkPHP中使用ajax接收json数据的方法
Dec 18 PHP
PHP实现加密的几种方式介绍
Feb 22 PHP
PHP设计模式之装饰者模式代码实例
May 11 PHP
PHP排序算法类实例
Jun 17 PHP
php实现简单的上传进度条
Nov 17 PHP
PHP使用socket发送HTTP请求的方法
Feb 14 PHP
PHP实现微信提现功能(微信商城)
Nov 21 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 PHP
详解Laravel制作API接口
May 31 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
全国FM电台频率大全 - 2 天津市
2020/03/11 无线电
php匹配字符中链接地址的方法
2014/12/22 PHP
PHP实现的简单分页类及用法示例
2016/05/06 PHP
php接口技术实例详解
2016/12/07 PHP
PHP优化之批量操作MySQL实例分析
2020/04/23 PHP
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
jquery插件treegrid树状表格的使用方法详解(.Net平台)
2017/01/03 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
vue实现文字加密功能
2019/09/27 Javascript
[41:12]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
Python实现从url中提取域名的几种方法
2014/09/26 Python
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
python计算时间差的方法
2015/05/20 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
老生常谈进程线程协程那些事儿
2017/07/24 Python
Python使用Matplotlib实现雨点图动画效果的方法
2017/12/23 Python
python机器学习理论与实战(二)决策树
2018/01/19 Python
python join方法使用详解
2019/07/30 Python
详解Python 重学requests发起请求的基本方式
2020/02/07 Python
Django 设置多环境配置文件载入问题
2020/02/25 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
Python可以用来做什么
2020/11/23 Python
python网络爬虫实现发送短信验证码的方法
2021/02/25 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
屈臣氏马来西亚官网:Watsons马来西亚
2019/06/15 全球购物
美国小蜜蜂Burt’s Bees德国官网:天然唇部、皮肤和身体护理产品
2020/06/14 全球购物
服务员自我评价
2014/01/25 职场文书
教师个人学习总结
2015/02/11 职场文书
社团个人总结范文
2015/03/05 职场文书
诉讼和解协议书
2016/03/23 职场文书
python如何在word中存储本地图片
2021/04/07 Python