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数组的使用方法小结
Sep 23 PHP
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
Mar 06 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
Aug 25 PHP
php防止CC攻击代码 php防止网页频繁刷新
Dec 21 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
Mar 13 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
Jul 03 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
thinkPHP框架整合tcpdf插件操作示例
Aug 07 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
Apr 10 PHP
PHP中的self关键字详解
Jun 23 PHP
PHP pthreads v3下同步处理synchronized用法示例
Feb 21 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中的Memcache详解
2014/04/05 PHP
PHP处理Oracle的CLOB实例
2014/11/03 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
PHP用swoole+websocket和redis实现web一对一聊天
2019/11/05 PHP
基于jquery的图片懒加载js
2010/06/30 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
js取消单选按钮选中并判断对象是否为空
2013/11/14 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
js实现将选中值累加到文本框的方法
2015/08/12 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
微信小程序 sha1 实现密码加密实例详解
2017/07/06 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
2019/01/29 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
开工仪式主持词
2014/03/20 职场文书
让世界充满爱演讲稿
2014/05/24 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server
python实现简单的聊天小程序
2021/07/07 Python