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 相关文章推荐
不用数据库的多用户文件自由上传投票系统(2)
Oct 09 PHP
解析mysql left( right ) join使用on与where筛选的差异
Jun 18 PHP
phpmailer发送gmail邮件实例详解
Jun 24 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
Dec 03 PHP
php检测iis环境是否支持htaccess的方法
Feb 18 PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 PHP
php实现简单的上传进度条
Nov 17 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
Mar 14 PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 PHP
PHP使用redis消息队列发布微博的方法示例
Jun 22 PHP
Yii2.0实现的批量更新及批量插入功能示例
Jan 29 PHP
PHP数组array类常见操作示例
May 15 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中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
通过命令行生成vue项目框架的方法
2017/07/12 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
对Python中range()函数和list的比较
2018/04/19 Python
Python中bisect的使用方法
2019/12/31 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
如何将PySpark导入Python的放实现(2种)
2020/04/26 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
Python 利用OpenCV给照片换底色的示例代码
2020/08/03 Python
python爬虫beautifulsoup解析html方法
2020/12/07 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
留学推荐信写作指南
2014/01/25 职场文书
学生周末长期请假条
2014/02/15 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
2014年体育部工作总结
2014/11/13 职场文书
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL