0
1

More than 3 years have passed since last update.

LaravelでMySQLのログを日時で出力する方法

Last updated at Posted at 2019-12-25

ほぼメモ用。
Providers/AppServiceProvider.phpの中にboot()というメソッドがいるので、その中に以下を記述。

Providers/AppServiceProvider.php
    /**
     * 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

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

終わり!
ログを見てこそ開発は進む(知らんけど

参考:Laravel 5.6 ログ

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1