bilfeldt / laravel-route-statistics
Log statistics about route usage per user/team
Fund package maintenance!
bilfeldt
Installs: 82 013
Dependents: 2
Suggesters: 0
Security: 0
Stars: 228
Watchers: 3
Forks: 23
Open Issues: 1
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- bilfeldt/laravel-request-logger: ^3.0
- illuminate/contracts: ^10.0 || ^11.0
- laravel/framework: ^10.0 || ^11.0
Requires (Dev)
- nunomaduro/collision: ^7.2 || ^8.0
- orchestra/testbench: ^8.0 || ^9.0
- phpunit/phpunit: ^10.0
- spatie/laravel-ray: ^1.32
README
Log Laravel requests and responses for statistical purposes and optionally aggregate by hours/days/months for minimal db requirements.
Description
Log requests and group them together for aggregated statistics of route usage. Grouping requests by route means that this package saves a minimum of data to the database and subsequent purging of old data can improve this even further.
This package lets you:
- See how much each user uses the application and what part of the application they use
- See if any unauthenticated users are making a lot of requests to your application
Installation
You can install the package via composer:
composer require bilfeldt/laravel-route-statistics
You can publish and run the migrations with:
php artisan vendor:publish --provider="Bilfeldt\LaravelRouteStatistics\LaravelRouteStatisticsServiceProvider" --tag="migrations" php artisan migrate
You can publish the config file with:
php artisan vendor:publish --provider="Bilfeldt\LaravelRouteStatistics\LaravelRouteStatisticsServiceProvider" --tag="config"
Usage
There are a few ways to enable logging of route usage:
Enable global logging
This will enable site-wide logging and although being the easiest implementation this might not be exactly what you are looking for (consider only logging relevant routes using the middleware approach below)
Simply add RouteStatisticsMiddleware
as a global middleware in app/Http/Kernel.php
// app/Http/Kernel.php <?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { /** * The application's global HTTP middleware stack. * * These middleware are run during every request to your application. * * @var array */ protected $middleware = [ \Bilfeldt\LaravelRouteStatistics\Http\Middleware\RouteStatisticsMiddleware::class, // <-- Added // \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, ]; ...
Enable via middleware
Instead of adding RouteStatisticsMiddleware
as a global middleware then it can be added to certain routes or route groups using:
Route::middleware(['routestatistics'])->...
Enable using request macro
It is possible to enable logging ad-hoc, usually within a controller, which is useful for any conditional logging:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class HomeController extends Controller { /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('auth'); } /** * Show the application dashboard. * * @return \Illuminate\Contracts\Support\Renderable */ public function index(Request $request) { $request->routeStatistics(); // This will enable route statistics logging return view('home'); } }
Artisan commands
This package comes with two neat Artisan commands:
route:stats
: An easy way to see route statistics for certain relevant routes.route:unused
: A neat way to list the routes without any logs. Be aware that the routes should also be logged for this to be useful.
How it works
This package works as follows:
- Tag the request for logging: Can be done using middleware or request helper
- (optional) Add any context data which will be used when logging: A common use case is adding relevant route parameters like a
team_id
for example - Log the request: Persist the log record to the database - the following will be logged when using the default logger:
user_id
: The authenticated user (if any)team_id
: The team id associated with the request (if available)method
: The HTTP method (GET/POST/...
)route
: The route name (if available) or the route URI (eg/posts/{post}
)parameters
: The route parameters passed (if enabled elsenull
)status
: The HTTP status (eg202
)ip
: The request ipdate
: The date of the request as datetime (can be aggregated)counter
: Number of requests logged when aggregating records by minute/hour/day/month...
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.