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

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

总结

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

时间: 2024-09-27 00:35:47

Laravel给生产环境添加监听事件(SQL日志监听)的相关文章

安卓(Android)动态创建多个按钮并添加监听事件_Android

1.获取屏幕大小,以合理设定 按钮 大小及位置 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; int height = dm.heightPixels; 2.自定义layout组件 RelativeLayout layout = new RelativeLayout(this); 3.这里创建1

EF migration 在生产环境中如何实现?

问题描述 EFcodefirst需要用migration来升级数据库migration需要输入命令来升级并更新但是问题来了,如果是正在运行的项目,我是先升级数据库还是先发布呢?不管怎么做都会提示数据库不匹配吧? 解决方案 解决方案二: 升级数据库肯定需要先停掉吧解决方案三: 引用1楼FoxDave的回复: 升级数据库肯定需要先停掉吧 这个是最好的解决方案了吗?...解决方案四: 引用2楼hercules135的回复: 这个是最好的解决方案了吗?... 没有什么"最好",只有"

基于在生产环境中使用php性能测试工具xhprof的详解_php实例

xhprof 是facebook开源出来的一个php性能测试工具,也可以称之为profile工具,这个词不知道怎么翻译才比较达意.跟之前一直使用的xdebug相比,有很多类似之处.以前对xdebug有一些记录还可以供参考,但是它的缺点是对性能影响太大,即便是开启了profiler_enable_trigger参数,用在生产环境中也是惨不忍睹,cpu立刻就飙到high.而xhprof就显得很轻量,是否记录profile可以由程序控制,因此,用在生产环境中也就成为一种可能.在它的文档上可以看到这样一

生产环境sql语句调优实战第九篇

生产环境中有一些sql语句是不定时炸弹,不声不响的运行着,可能相关的表很大,运行时间达数小时甚至数天. 上周在生产环境中发现一条sql语句,运行时间几乎是按照天来计算的.看到这种sql语句,就希望能够马上能够找到立竿见影的效果,不过欲速则不达,需要做不少工作.一定要反复验证可行. sql语句的运行情况如下: SQL Execution ID : 16777217  Execution Started : 10/18/2014 11:46:30  First Refresh Time : 10/1

jQuery中的fullCalendar控件,给按钮添加监听事件。

问题描述 jQuery中的fullCalendar控件,给按钮添加监听事件. 5C $('#calendar').fullCalendar({ height : 177 header:{ left: 'title' center: '' right: 'prevnext' } theme: false buttonText: { today: '今天' } selectable:true allDayText: '全天' monthNames: ['一月''二月''三月''四月''五月''六月'

drawerlayout-DrawerLayout 添加完监听事件 不进onDrawerClosed()和 onDrawerOpened()

问题描述 DrawerLayout 添加完监听事件 不进onDrawerClosed()和 onDrawerOpened() import android.support.v4.widget.DrawerLayout; import android.support.v4.app.ActionBarDrawerToggle; public class MainActivity extends Activity{ private DrawerLayout drawer; private Action

watchservice-jre 7 WatchService在触发新建事件的时候,能否给新建的文件夹添加监听事件

问题描述 jre 7 WatchService在触发新建事件的时候,能否给新建的文件夹添加监听事件 jre 7 WatchService在触发新建事件的时候,能否给新建的文件夹添加监听事件

Android编程实现音量按钮添加监听事件的方法

本文实例讲述了Android编程实现音量按钮添加监听事件的方法.分享给大家供大家参考,具体如下: 很多Android应用都应用到音量按钮,比如翻页,调整音乐声音大小等,但是如果没有对音量按钮进行监听,则无法达到预期的效果.如下代码,就是监听Android手机的音量按钮,开发者可以在相应的位置添加自己需要实现的功能. @Override public boolean onKeyDown (int keyCode, KeyEvent event) { // 获取手机当前音量值 int i = get

frame-求救。为什么键盘监听事件不响应了。。

问题描述 求救.为什么键盘监听事件不响应了.. mport java.awt.CardLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; impor