pod-point / laravel-monolog-kinesis
Laravel package that logs to Kinesis
Installs: 53 556
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 7
Forks: 0
Open Issues: 1
Requires
- php: >=7.2.5
- aws/aws-sdk-php: ^3.155
- illuminate/support: ^6.0|^7.0|^8.0|^9.0
- monolog/monolog: ^2.0
Requires (Dev)
- mockery/mockery: ^1.2.0
- orchestra/testbench: ^4.0|^5.0|^6.0|^7.0
- phpunit/phpunit: ^8.0|^9.0
README
A simple package to forward Laravel application logs to a Kinesis stream.
Installation
Require the package with composer:
composer require pod-point/laravel-monolog-kinesis
For Laravel < 6.0 you can use pod-point/laravel-monolog-kinesis:^2.0
.
Setting up the AWS Kinesis service
Add your AWS key ID, secret and default region to your config/services.php
:
<?php return [ // ... 'kinesis' => [ 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], ];
Usage
Simply use the kinesis
driver on any of your channels within your config/logging.php
:
<?php return [ // ... 'channels' => [ 'some_channel' => [ 'driver' => 'kinesis', 'stream' => 'some_stream_name', 'level' => 'info', // default level is debug ], ], ];
You can optionally specify a different key
, secret
and region
at the channel level too if necessary:
<?php return [ // ... 'channels' => [ 'some_channel' => [ 'driver' => 'kinesis', 'stream' => env('LOGGING_KINESIS_STREAM'), 'level' => env('LOG_LEVEL', 'debug'), 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], ], ];
Formatting
When calling for example:
logger()->info('This is an info log message', ['foo' => 'bar']);
This is the default format we will use to forward Laravel application logs to a Kinesis stream
{ "Data": { "timestamp": "2022-10-05T11:13:48.166208+00:00", "host": "localhost", "project": "Your Laravel App Name", "env": "production", "message": "This is an info log message", "channel": "some_channel", "level": "INFO", "extra": "", "context": { "foo": "bar" }, }, "PartitionKey": "some_channel", "StreamName": "some-kinesis-stream-name" }
If this doesn't suit your needs, you can specify a custom formatter to use:
<?php return [ // ... 'channels' => [ 'some_channel' => [ // ... 'formatter' => \App\SimplerCustomFormatter::class, ], ], ];
And define it like so for example:
namespace App; use Monolog\Formatter\NormalizerFormatter; class SimplerCustomFormatter extends NormalizerFormatter { public function format(array $record) // here you can customize the formatting { return [ 'Data' => [ 'level' => $record['level_name'], 'custom_message' => $record['message'], ], ]; } }
HTTP options
You can configure a set of http
options that are applied to http requests and transfers created when using the AWS SDK from both the service
and channel
levels.
// ... 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 'http' => [ 'verify' => false ]
More details about all the supported options can be found from the AWS documentation.
Permissions
If you are using an AWS Key, remember to add the kinesis:PutRecord
and kinesis:PutRecords
permissions to this user.
Changelog
Please see our Releases for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Travel shouldn't damage the earth 🌍
Made with ❤️ at Pod Point