1.環(huán)境情況
2.代碼情況
controller:
中間件:
3.情況描述
第一次請(qǐng)求
第二次請(qǐng)求
第三次請(qǐng)求
第四次請(qǐng)求
問(wèn)題:
感覺(jué)就是
\Illuminate\Database\Events\QueryExecuted $query
會(huì)記錄當(dāng)前連接的所有SQL,因?yàn)楫?dāng)前進(jìn)程的MySQL鏈接不會(huì)斷開(kāi),每次打印SQL,會(huì)把之前所有請(qǐng)求的SQL都打印出來(lái)
如果想只打印當(dāng)前請(qǐng)求的SQL,應(yīng)該如何處理?
文檔中ARMS監(jiān)控,也有這樣的代碼
不知道是否也會(huì)出現(xiàn)類(lèi)似的問(wèn)題
因?yàn)槊看握?qǐng)求都執(zhí)行中間件,都會(huì)加一個(gè)監(jiān)聽(tīng),所以就會(huì)有重復(fù)的監(jiān)聽(tīng),會(huì)重復(fù)打印。
這個(gè)監(jiān)聽(tīng)不適合放在中間件,適合放在進(jìn)程啟動(dòng)項(xiàng)。
新建 app/bootstrap/Report.php
(目錄不存在時(shí)自行創(chuàng)建)
<?php
namespace app\bootstrap;
use Webman\Bootstrap;
use support\Db;
class Report implements Bootstrap
{
public static function start($worker)
{
Db::listen(function(\Illuminate\Database\Events\QueryExecuted $query) {
echo $query->sql. "\n";
});
}
}
打開(kāi) config/bootstrap.php
添加如下配置
<?php
return [
// ... 這里省略其它配置 ...
app\bootstrap\Report::class,
];
以上兩步就完成了進(jìn)程啟動(dòng)時(shí)設(shè)置SQL監(jiān)聽(tīng)。