ユーザ用ツール

サイト用ツール


プログラム言語:php:laravel:ログ出力:sqlクエリのログ出力

文書の過去の版を表示しています。


【Laravel】sqlクエリのログ出力

本当は MySQL などが吐き出すクエリログを見るのが一番よいのですが、サーバの権限によっては残念ながら見れないことも。
そんなときは、以下の設定を行うことで、Laravel で実行した sql クエリのログを吐き出すことが可能です。

AppServiceProvider.php の boot 関数内に処理を追加します。

app\Providers\AppServiceProvider.php

  1. <?php
  2.  
  3. namespace App\Providers;
  4.  
  5. use Illuminate\Support\ServiceProvider;
  6. use Illuminate\Support\Facades\Log;
  7. use Illuminate\Support\Facades\Validator;
  8. use DB;
  9.  
  10. class AppServiceProvider extends ServiceProvider
  11. {
  12. public function boot()
  13. {
  14. // 本番環境では出力しない
  15. if (config('app.env') !== 'production') {
  16. DB::listen(function ($query) {
  17. $sql = $query->sql;
  18. $cnt = count($query->bindings);
  19. for ($i=0; $i<$cnt; $i++) {
  20. $binding = $query->bindings[$i];
  21. if (strlen($binding) > 200) {
  22. $binding = mb_strimwidth($binding, 0, 200, '...');
  23. }
  24. $sql = preg_replace("/\?/", $binding, $sql, 1);
  25. }
  26.  
  27. // channel で出力先のチャンネルを指定
  28. // info に出力したい文字列を指定
  29. Log::channel('sqllog')->info('[' . $query->time . 'ms] ' . $sql);
  30. });
  31. }
  32. }
  33. }

コンフィグの logging.php に sql ログ用チャンネルの追加。

config\logging.php

  1. 'channels' => [
  2.  
  3. // channels 内の一番下に追加
  4. 'sqllog' => [
  5. 'driver' => 'daily',
  6. 'path' => storage_path('logs/sql.log'),
  7. 'level' => 'debug',
  8. 'days' => 14,
  9. 'permission' => 0664, // パーミッションエラーが出るなら必要に応じて指定
  10. ],
  11. ],
  12.  
  13. ];

コメント

コメントを入力. Wiki文法が有効です:
 
プログラム言語/php/laravel/ログ出力/sqlクエリのログ出力.1591067158.txt.gz · 最終更新: 2020/06/02 12:05 by humolife