ほぼメモ用。
Providers/AppServiceProvider.phpの中にboot()というメソッドがいるので、その中に以下を記述。
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
DB::listen(function ($query) {
$sql = preg_replace_array('/\?/', $query->bindings, $query->sql);
\Log::info("[Query Time:{$query->time}s] {$sql}");
});
}
$query->sql
だけだと実際に渡っているパラメータは確認出来ない。
以下のようになっている
SELECT * FROM hoge WHERE id = ?
$query->bindings
で実際にWHERE区に渡っている値を確認する事が出来るがやりたいことはそうじゃなかった。
ちゃんと連結して実行クエリが見たかったんや...!
上記はただ「?」で渡ってきた値をbindingの値に置換するだけだけど、自分の理想の形になった。実行すると以下のようになる。
SELECT * FROM hoge WHERE id = 1
キタコレ!
Laravelのログを日時で出力する
Laravelのログ出力はデフォルトだと日時にはなっていない。
詳しくは『.env』の中身をチェック。
以下のように変更。
- LOG_CHANNEL=default
+ LOG_CHANNEL=daily
logの出力については『config/logging.php』に書いてある。
上記の設定を行うと以下のように日時でログが出力され、PHPのログもSQLのログもここに出力される。
storage/logs/laravel-2019-12-25.log
[2019-12-25 12:37:27] local.ERROR: Call to undefined method
[2019-12-25 13:36:43] local.INFO: [Query Time:155.68s] select * from `hoge` where `id` = 1
終わり!
ログを見てこそ開発は進む(知らんけど