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 数组的创建、调用和更新实现代码
Mar 09 PHP
PHP中文URL编解码(urlencode()rawurlencode()
Jul 03 PHP
PHP如何解决网站大流量与高并发的问题
Jun 25 PHP
PHP性能优化 产生高度优化代码
Jul 22 PHP
PHP常用的文件操作函数经典收藏
Apr 02 PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 PHP
php使用date和strtotime函数输出指定日期的方法
Nov 14 PHP
PHP安装threads多线程扩展基础教程
Nov 17 PHP
zen_cart实现支付前生成订单的方法
May 06 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
Oct 09 PHP
php实现生成code128条形码的方法详解
Jul 19 PHP
PHP性能测试工具xhprof安装与使用方法详解
Apr 29 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
预告映像公开!第1章续篇剧场版动画《Princess Principal Crown Handler》4月10日上映!
2020/03/06 日漫
PHP伪造referer实例代码
2008/09/20 PHP
PHP 引用是个坏习惯
2010/03/12 PHP
使用bcompiler对PHP文件进行加密的代码
2010/08/29 PHP
PHP 获取文件权限函数介绍
2013/07/11 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
深入解析JavaScript中的变量作用域
2013/12/06 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
BootStrap 可编辑表Table格
2016/11/24 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
Vue 禁用浏览器的前进后退操作
2020/09/04 Javascript
Python生成pdf文件的方法
2014/08/04 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
python中列表和元组的区别
2017/12/18 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
python pandas模块基础学习详解
2019/07/03 Python
django框架中间件原理与用法详解
2019/12/10 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
什么是反射
2012/03/17 面试题
销售实习自我鉴定
2013/12/07 职场文书
网管求职信
2014/03/03 职场文书
交通安全标语
2014/06/06 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
文明单位汇报材料
2014/12/24 职场文书
python tkinter实现定时关机
2021/04/21 Python
JS前端轻量fabric.js系列物体基类
2022/08/05 Javascript