Laravelで操作ログを簡単に出力する方法

スポンサーリンク
スポンサーリンク

操作ログ用のテーブル作成

migrationファイル作成


$ php artisan make:migration create_action_logs_table --create=action_logs

マイグレーションファイル編集

マイグレーションファイルを開き、取得するカラム情報を書いていきます。


$ vi database/migrations/2020_XX_XX_XXXXXX_create_action_logs_table.php

$table->string('ip_address')->nullable()->comment('IPアドレス');
$table->string('route')->nullable()->comment('ルートエイリアス');
$table->string('method')->nullable()->comment('接続メソッド');
$table->integer('status')->unsigned()->nullable()->comment('返却ステータス');
$table->string('url')->nullable()->comment('API URL');
$table->text('user_agent')->nullable()->comment('ユーザーエージェント');
$table->bigInteger('actioned_by')->nullable()->unsigned()->comment('操作者');
$table->timestamp('actioned_at')->useCurrent()->comment('操作日時');

マイグレーション実行

書き終えたら、マイグレーションを実行します。
※今回は既存のテーブルとseederファイルが存在するため、refreshしてseederも同時に実行します。


$ php artisan migrate:refresh --seed

操作ログテーブル用のモデル作成

モデル作成


$ php artisan make:model ActionLog

ミドルウェア作成

操作ログで取得するためのミドルウェアを作成します。

ミドルウェア作成


$ php artisan make:middleware ActionlogMiddleware

ミドルウェア編集


$ vi app/Http/Middleware/ActionlogMiddleware.php

namespace App\Http\Middleware;

use Closure;
use App\Models\ActionLog;
use App\Services\ActionLogService;
use \Route;

class ActlogMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        $response = $next($request);

        $this->insertActionLog($request, $response->status());

        return $response;
    }

    /**
     * 操作ログ登録処理
     *
     * @param $request
     * @param $status
     * @return void
     */
    public function insertActionLog($request, $status)
    {
        $user = $request->user();
        $data = [
            'route' => Route::currentRouteName(),
            'url' => $request->path(),
            'ip_address' => $request->ip(),
            'method' => $request->method(),
            'status' => $status,
            'user_agent' => $request->userAgent(),
            'actioned_by' => $user ? $user->id : null,
        ];

        $actionLog = new ActionLog;
        $actionLog->create($data);
    }
}

ミドルウェア登録

今回はAPIの操作ログとなるため、Kernel.phpの $middlewareGroupsの 「api」 に追加します。


$ vi app/Http/Kernel.php

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [

        ・・・

        'api' => [
            ・・・
            \App\Http\Middleware\ActionlogMiddleware::class,
        ・・・
        ],
    ];

これで完了です。

コメント

タイトルとURLをコピーしました