Laravel給生產(chǎn)環(huán)境添加監(jiān)聽(tīng)事件(SQL日志監(jiān)聽(tīng))
本文主要給大家介紹的是關(guān)于Laravel給生產(chǎn)環(huán)境添加監(jiān)聽(tīng)事件(SQL日志監(jiān)聽(tīng))的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面來(lái)一起看看詳細(xì)的介紹:
laravel版本:5.2.*
一、創(chuàng)建監(jiān)聽(tīng)器
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
會(huì)自動(dòng)生成文件 app/Listeners/QueryListener.php
二、注冊(cè)事件
打開(kāi) app/Providers/EventServiceProvider.php,在 $listen
中添加 Illuminate\Database\Events\QueryExecuted
事件的監(jiān)聽(tīng)器為 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); // } }
三、添加邏輯
打開(kāi) app/Listeners/QueryListener.php
光有一個(gè)空的監(jiān)聽(tīng)器是不夠的,我們需要自己實(shí)現(xiàn)如何把 $sql
記錄到日志中。為此,對(duì) QueryListener 進(jìn)行改造,完善其 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); } }
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
thinkPHP實(shí)現(xiàn)將excel導(dǎo)入到數(shù)據(jù)庫(kù)中的方法
這篇文章主要介紹了thinkPHP實(shí)現(xiàn)將excel導(dǎo)入到數(shù)據(jù)庫(kù)中的方法,涉及thinkPHP結(jié)合PHPExcel插件操作excel與數(shù)據(jù)庫(kù)的相關(guān)技巧,需要的朋友可以參考下2016-04-04在WordPress中安裝使用視頻播放器插件Hana Flv Player
這篇文章主要介紹了在WordPress中安裝使用播放器插件Hana Flv Player的方法,包括其簡(jiǎn)單的代碼控制,需要的朋友可以參考下2016-01-01分享PHP-pcntl 實(shí)現(xiàn)多進(jìn)程代碼
PHP可通過(guò)PCNTL擴(kuò)展實(shí)現(xiàn)進(jìn)程控制,如進(jìn)程創(chuàng)建,信號(hào)處理,進(jìn)程中斷判斷等。但只能在CLI模式下操作。PCNTL的信號(hào)機(jī)制是基于 ticks 機(jī)制實(shí)現(xiàn)的。2016-09-09微信公眾平臺(tái)開(kāi)發(fā)之天氣預(yù)報(bào)功能
這一篇文章將對(duì)大家每天都會(huì)關(guān)心的天氣查詢進(jìn)行開(kāi)發(fā),例如,用戶發(fā)送消息 “黃岡天氣”,則會(huì)返回黃岡實(shí)時(shí)天氣狀況,以及未來(lái)兩天甚至未來(lái)五天的天氣狀況。2015-08-08針對(duì)多用戶實(shí)現(xiàn)頭像上傳功能PHP代碼 適用于登陸頁(yè)面制作
這篇文章主要為大家詳細(xì)介紹了針對(duì)多用戶實(shí)現(xiàn)頭像上傳功能PHP代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08php微信公眾賬號(hào)開(kāi)發(fā)之前五個(gè)坑(一)
這篇文章主要為大家詳細(xì)介紹了php微信公眾賬號(hào)開(kāi)發(fā)之前五個(gè)坑,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09Laravel6.2中用于用戶登錄的新密碼確認(rèn)流程詳解
這篇文章主要介紹了Laravel6.2中用于用戶登錄的新密碼確認(rèn)流程詳解,該功能使你可以要求已登錄的用戶重新輸入密碼,然后才能訪問(wèn)路由2019-10-10