Log HTTP requests
, (*1)
This package adds a middleware which can log incoming requests to the default log.
If anything goes wrong during a user's request, you'll still be able to access the original request data sent by that user., (*2)
This log acts as an extra safety net for critical user submissions, such as forms that generate leads., (*3)
Installation
You can install the package via composer:, (*4)
composer require hoangphison/laravel-http-logger
Optionally you can publish the configfile with:, (*5)
php artisan vendor:publish --provider="Spatie\HttpLogger\HttpLoggerServiceProvider" --tag="config"
This is the contents of the published config file:, (*6)
return [
/*
* The log profile which determines whether a request should be logged.
* It should implement `LogProfile`.
*/
'log_profile' => \Spatie\HttpLogger\LogNonGetRequests::class,
/*
* The log writer used to write the request to a log.
* It should implement `LogWriter`.
*/
'log_writer' => \Spatie\HttpLogger\DefaultLogWriter::class,
/*
* Filter out body fields which will never be logged.
*/
'except' => [
'password',
'password_confirmation',
],
];
Usage
This packages provides a middleware which can be added as a global middleware or as a single route., (*7)
// in `app/Http/Kernel.php`
protected $middleware = [
// ...
\Spatie\HttpLogger\Middlewares\HttpLogger::class
];
// in a routes file
Route::post('/submit-form', function () {
//
})->middleware(\Spatie\HttpLogger\Middlewares\HttpLogger::class);
Logging
Two classes are used to handle the logging of incoming requests:
a LogProfile class will determine whether the request should be logged,
and LogWriter class will write the request to a log., (*8)
A default log implementation is added within this package.
It will only log POST, PUT, PATCH, and DELETE requests
and it will write to the default Laravel logger., (*9)
You're free to implement your own log profile and/or log writer classes,
and configure it in config/http-logger.php., (*10)
A custom log profile must implement \Spatie\HttpLogger\LogProfile.
This interface requires you to implement shouldLogRequest., (*11)
// Example implementation from `\Spatie\HttpLogger\LogNonGetRequests`
public function shouldLogRequest(Request $request): bool
{
return in_array(strtolower($request->method()), ['post', 'put', 'patch', 'delete']);
}
A custom log writer must implement \Spatie\HttpLogger\LogWriter.
This interface requires you to implement logRequest., (*12)
// Example implementation from `\Spatie\HttpLogger\DefaultLogWriter`
public function logRequest(Request $request): void
{
$method = strtoupper($request->getMethod());
$uri = $request->getPathInfo();
$bodyAsJson = json_encode($request->except(config('http-logger.except')));
$message = "{$method} {$uri} - {$bodyAsJson}";
Log::info($message);
}
Testing
bash
composer test, (*13)
Changelog
Please see CHANGELOG for more information what has changed recently., (*14)
Contributing
Please see CONTRIBUTING for details., (*15)
Security
If you discover any security related issues, please email freek@spatie.be instead of using the issue tracker., (*16)
Postcardware
You're free to use this package, but if it makes it to your production environment we highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using., (*17)
Our address is: Spatie, Samberstraat 69D, 2060 Antwerp, Belgium., (*18)
We publish all received postcards on our company website., (*19)
Credits
Support us
Spatie is a webdesign agency based in Antwerp, Belgium. You'll find an overview of all our open source projects on our website., (*20)
Does your business depend on our contributions? Reach out and support us on Patreon.
All pledges will be dedicated to allocating workforce on maintenance and new awesome stuff., (*21)
License
The MIT License (MIT). Please see License File for more information., (*22)