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 输出缓存详解
Jun 20 PHP
PHP 程序员的调试技术小结
Nov 15 PHP
php上传文件并显示上传进度的方法
Mar 24 PHP
微信开发之网页授权获取用户信息(二)
Jan 08 PHP
php集成动态口令认证
Jul 21 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
php识别翻转iphone拍摄的颠倒图片
May 17 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
May 24 PHP
PHP如何解决微信文章图片防盗链
Dec 09 PHP
PHP对接阿里云虚拟号的实现(号码隐私保护)
Apr 06 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+mysql事务rollback&commit示例
2010/02/08 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
使用js画图之画切线
2015/01/12 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
vue点击按钮动态创建与删除组件功能
2019/12/29 Javascript
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
python分析apache访问日志脚本分享
2015/02/26 Python
Python合并多个装饰器小技巧
2015/04/28 Python
Python抓取框架Scrapy爬虫入门:页面提取
2017/12/01 Python
django静态文件加载的方法
2018/05/20 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
美国零售商店:Blue&Cream
2017/04/07 全球购物
火山动力Java笔试题
2014/06/26 面试题
应届护士求职信范文
2014/01/26 职场文书
文明家庭先进事迹材
2014/01/27 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
个人授权委托书范文
2014/09/21 职场文书
销售人员工作自我评价
2014/09/21 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python
CentOS MySql8 远程连接实战
2022/04/19 MySQL