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一些有意思的小区别
Dec 06 PHP
php新建文件自动编号的思路与实现
Jun 27 PHP
php中的filesystem文件系统函数介绍及使用示例
Feb 13 PHP
thinkphp的c方法使用示例
Feb 24 PHP
PHP常用函数和常见疑难问题解答
Mar 05 PHP
php的慢速日志引起的Mysql错误问题分析
May 13 PHP
基于php实现随机合并数组并排序(原排序)
Nov 26 PHP
yii2控制器Controller Ajax操作示例
Jul 23 PHP
php生成二维码图片方法汇总
Dec 17 PHP
Yii全局函数用法示例
Jan 22 PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 PHP
Laravel 集成 Geetest验证码的方法
May 14 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
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
从javascript语言本身谈项目实战
2006/12/27 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
jquery ajax post提交数据乱码
2013/11/05 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
Vue自定义图片懒加载指令v-lazyload详解
2020/12/31 Javascript
node中Express 动态设置端口的方法
2017/08/04 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
React降级配置及Ant Design配置详解
2018/12/27 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
举例讲解Python中is和id的用法
2015/04/03 Python
听歌识曲--用python实现一个音乐检索器的功能
2016/11/15 Python
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
python调用外部程序的实操步骤
2019/03/04 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
python多线程同步之文件读写控制
2021/02/25 Python
python计算无向图节点度的实例代码
2019/11/22 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
自我鉴定 电子商务专业
2014/01/30 职场文书
医学生就业推荐表自我鉴定
2014/03/26 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
springboot拦截器无法注入redisTemplate的解决方法
2021/06/27 Java/Android
Python采集壁纸并实现炫轮播
2022/04/30 Python