This package allows sending request and response payload to the external logging system.
Supported out-of-box transports:
graylog
transport for sending request log to Graylog serverlog
transport for sending request log to Laravel logging systemnull
transport for skip request log in application tests
Install via composer
composer require xxxcoltxxx/request-logger
Publish the configuration file
php artisan vendor:publish --provider="RequestLogger\RequestLoggerServiceProvider"
Add exception reporting to your app/Exception/Handler.php
file
public function report(Exception $exception)
{
request_logger()->setException($exception);
// ...
parent::report($exception);
}
Fill configuration
// Enable request logger for all requests without adds middleware
'all_routes' => true,
// Default transport
'default' => env('REQUEST_LOGGER_TRANSPORT', 'graylog'),
// The class for format log message
'formatter' => RequestLogger\RequestFormatter::class,
/*
* Allowed transports with its configuration.
* Drivers: 'graylog', 'log', 'null'
*/
'transports' => [
// The graylog transport
'graylog' => [
// The Short message for graylog
'short_message' => env('GRAYLOG_SHORT_MESSAGE', 'requests'),
// Limit content size (in bytes). Set false to disable. Graylog has limitations on input messages
'content_limit' => env('GRAYLOG_CONTENT_LIMIT', 30000),
// The IP address of the log server
'host' => env('GRAYLOG_HOST', '127.0.0.1'),
// The UDP port of the log server
'port' => env('GRAYLOG_PORT', '12201'),
// The driver for send requests log to log server
'driver' => RequestLogger\Transports\GelfUdpTransport::class,
],
// ...
],
You can add custom messages to payload with request_logger
helper.
request_logger()->addMessage('Full name: John Doe')
Request logger enabled on all routes by default.
You can disable all_routes
option in the configuration file and use request_logger
middleware in routes configuration.
Documentation for registering middleware can be found in Laravel documentation
# config/request_logger.php
return [
'all_routes' => false,
// ...
];
# routes/api.php
Route::get('admin/profile', function () {
//
})->middleware('request_logger');
For custom log format you can use closure in the configuration file:
# config/request_logger.php
return [
// ...
'formatter' => function () {
$provider = request_logger();
$exception = $provider->getException();
$request = $provider->getRequest();
$response = $provider->getResponse();
return [
'uri' => $request->getRequestUri(),
'has_exception' => ! is_null($exception),
];
}
// ...
For writing custom driver you must add driver configuration and implement RequestLogger\Transports\RequestLoggerTransport
interface:
# .env
REQUEST_LOGGER_TRANSPORT=custom
# config/request_logger.php
return [
// ...
'transports' => [
// ...
'custom' => [
'driver' => Namespace\CustomTransport::class,
'custom_option' => 'value',
],
],
];
Use null
driver. You can use REQUEST_LOGGER_TRANSPORT
variable in phpunit.xml
configuration file.
composer install
vendor/bin/phpunit tests
- Unit tests
- Write Documentation for:
- Custom log format
- Writing custom drivers
- Add
log
driver - Add
null
driver - Add changelog
- Make video "How it works with graylog"