Skip to content

xxxcoltxxx/request-logger

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📝 Laravel request logger

Build Status Latest Stable Version Total Downloads

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 server
  • log transport for sending request log to Laravel logging system
  • null transport for skip request log in application tests

Installation

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,
    ],

    // ...
],

Adding app messages to request log

You can add custom messages to payload with request_logger helper.

request_logger()->addMessage('Full name: John Doe')

Enable logging only for specific routes

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');

Custom log format

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),
        ];
    }

    // ...

Writing custom drivers

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',
        ],
    ],
];

Disable request logger in application tests

Use null driver. You can use REQUEST_LOGGER_TRANSPORT variable in phpunit.xml configuration file.

Testing

composer install
vendor/bin/phpunit tests

Roadmap

  1. Unit tests
  2. Write Documentation for:
    • Custom log format
    • Writing custom drivers
  3. Add log driver
  4. Add null driver
  5. Add changelog
  6. Make video "How it works with graylog"

About

Sending request and response payload to external logging system

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published