Laravel给生产环境添加监听事件(SQL日志监听)

发布时间 - 2026-01-11 01:56:55    点击率:

本文主要给大家介绍的是关于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);
 }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# laravel  # 事件监听  # 监听  # sql  # 日志  # Laravel框架实现利用监听器进行sql语句记录功能  # 深入解析PHP的Laravel框架中的event事件操作  # 利用Laravel事件系统如何实现登录日志的记录详解  # Laravel模型事件的实现原理详解  # laravel学习笔记之模型事件的几种用法示例  # 分享个简单易懂且非常有用的laravel事件  # Laravel事件监听器用法实例分析  # 的是  # 相关内容  # 给大家  # 这篇文章  # 谢谢大家  # 自动生成  # 有一个  # 方法如下  # 有疑问  # Listeners  # bin  # app  # sudo  # QueryExecuted  # local  # usr 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  Angular 表单中正确绑定输入值以确保提交与验证正常工作  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  微信公众帐号开发教程之图文消息全攻略  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  Android Socket接口实现即时通讯实例代码  如何快速搭建个人网站并优化SEO?  如何在腾讯云服务器上快速搭建个人网站?  Python3.6正式版新特性预览  在Oracle关闭情况下如何修改spfile的参数  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  独立制作一个网站多少钱,建立网站需要花多少钱?  原生JS实现图片轮播切换效果  Android中AutoCompleteTextView自动提示  详解CentOS6.5 安装 MySQL5.1.71的方法  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  iOS正则表达式验证手机号、邮箱、身份证号等  如何为不同团队 ID 动态生成多个“认领值班”按钮  如何正确选择百度移动适配建站域名?  ,南京靠谱的征婚网站?  开心动漫网站制作软件下载,十分开心动画为何停播?  如何用y主机助手快速搭建网站?  重庆市网站制作公司,重庆招聘网站哪个好?  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  如何在阿里云高效完成企业建站全流程?  详解jQuery停止动画——stop()方法的使用  如何批量查询域名的建站时间记录?  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  如何用搬瓦工VPS快速搭建个人网站?  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  Python文件流缓冲机制_IO性能解析【教程】  三星网站视频制作教程下载,三星w23网页如何全屏?  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  Laravel如何处理异常和错误?(Handler示例)  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  原生JS获取元素集合的子元素宽度实例