# Laravel リクエストログ出力

Laravel のログ設定は、config/logging.php ファイルで定義されています。デフォルトでは、ログチャンネルは stack に設定されています。

# Log 設定有効化

新しいログチャンネルを追加して、リクエストログを出力することができます。config/logging.php ファイルに以下のような内容で、新しいログチャンネルを追加します。

'channels' => [
    // 略
    'requests' => [
        'enable' => env('LOG_REQUEST_ENABLE', false),
        'driver' => 'daily',
        'path' => storage_path('logs/requests.log'),
        'level' => 'debug',
    ],
],

上記の設定では、requests という名前のログチャンネルを作成しています。ログファイルの保存場所は、storage/logs/requests.log になります。

# RequestLogger を作成

リクエストログを記録するためのミドルウェアを作成

php artisan make:middleware RequestLogger

app/Http/Middleware/RequestLogger.php ミドルウエアファイルが自動生成されます。

# RequestLogger.php 編集

app/Http/Middleware/LogRequests.php に以下のようなコードを追加します。

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

class RequestLogger
{
    private $excludes = [
        '_debugbar',
    ];

    /**
     * Handle an incoming request.
     *
     * @param Request $request
     * @param Closure $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        if (config('logging.request.enable')) {
            if ($this->isWrite($request)) {
                $this->write($request);
            }
        }

        return $next($request);
    }

    /**
     * @param  Request $request
     * @return bool
     */
    private function isWrite(Request $request): bool
    {
        return ! in_array($request->path(), $this->excludes, true);
    }

    /**
     * @param  Request $request
     * @return void
     */
    private function write(Request $request): void
    {
        // Log::debug($request->method(), ['url' => $request->fullUrl(), 'request' => $request->all()]);
        Log::channel('requests')->debug($request->method(), ['url' => $request->fullUrl(), 'request' => $request->all()]);

    }
}

requests ログチャンネルを使用して、リクエスト内容を記録します。

# ミドルウェアを有効にする

app/Http/Kernel.php へミドルウェアを追加します









 


    protected $middleware = [
        // \App\Http\Middleware\TrustHosts::class,
        \App\Http\Middleware\TrustProxies::class,
        \Fruitcake\Cors\HandleCors::class,
        \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\RequestLogger::class,
    ];

# .env を編集

LOG_REQUEST_ENABLE=true

環境設定ファイルで有効にします。

これで、リクエストログが出力されます。

参考:Laravel 9 ログ 公式サイト (opens new window)

2023-03-25

同じタグを持つ記事をピックアップしました。