feugene / events-log-laravel
Events logging for laravel applications
Requires
- php: >=8.0
- illuminate/config: ^8.75 || ^9.0
- illuminate/contracts: ^8.75 || ^9.0
- illuminate/events: ^8.75 || ^9.0
- illuminate/log: ^8.75 || ^9.0
- monolog/monolog: ^2.7
- psr/log: ^2.0
Requires (Dev)
- ext-json: *
- ext-sockets: *
- efureev/support: ^4.12.0
- mockery/mockery: ^1.5
- orchestra/testbench: ^6.24
- phpstan/phpstan: ^1.8.1
- phpunit/phpunit: ^9.5
Suggests
- ext-sockets: For a sending data using TCP\UDP sockets
README
Events logging for Laravel
This package provides logging for Laravel events (events must implements special interface).
Requirements
- PHP >=8.0
- Laravel >= 8.75
Install
Require this package with composer using the following command:
$ composer require feugene/events-log-laravel "^3.0"
Installed
composer
is required (how to install composer).
You need to fix the major version of package.
Setup
After an installation you should setup it. Minimal config is following changing in you ./config/logging.php
file:
<?php return [ // ... 'events_channel' => env('EVENTS_LOG_CHANNEL', 'stack'), // ... ];
Where stack
- is a channel name, listed in the channels
section of the same file. Without specifying this option,
logging will be performed using the default channel.
You can override this option by adding to
.env
file the line:EVENTS_LOG_CHANNEL=%channel_name%
.
For instance, if you need to log events in a different file in the Monolog
format and additionally record to another
file in the Logstash
format, then the configuration may look like this:
<?php return [ 'events_channel' => env('EVENTS_LOG_CHANNEL', 'events-stack'), // ... 'channels' => [ // ... 'events-stack' => [ 'driver' => 'stack', 'channels' => ['events-monolog', 'events-logstash'], ], 'events-monolog' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel-events.log'), 'level' => 'debug', ], 'events-logstash' => [ 'driver' => 'custom', 'via' => Feugene\EventsLogLaravel\Logging\EventsLogstashLogger::class, 'path' => storage_path('logs/logstash/laravel-events.log'), 'level' => 'debug', ], ], ];
To send logs in the Logstash
format over UPD:
<?php return [ 'default' => env('LOG_CHANNEL', 'app-logstash-udp'), 'events_channel' => env('EVENTS_LOG_CHANNEL', 'events-logstash-udp'), // ... 'channels' => [ // ... 'app-logstash-udp' => [ 'driver' => 'custom', 'via' => Feugene\EventsLogLaravel\Logging\DefaultUdpLogstashLogger::class, 'host' => env('LOGSTASH_UDP_HOST', 'logstash'), 'port' => (int) env('LOGSTASH_UDP_PORT', 4560), 'level' => 'debug', ], 'events-logstash-udp' => [ 'driver' => 'custom', 'via' => Feugene\EventsLogLaravel\Logging\EventsUdpLogstashLogger::class, 'host' => env('LOGSTASH_UDP_HOST', 'logstash'), 'port' => (int) env('LOGSTASH_UDP_PORT', 4560), 'level' => 'debug', ], ], ];
You can read more about Laravel Logging at source.
Using
This package works as follows:
- The ServiceProvider of this package registers its listener for the all events that occur in the application;
- When an event is received, it checks the implementation of the event class for compliance with
the
ShouldBeLoggedContract
interface; - If your event class implemented the
ShouldBeLoggedContract
interface, then using the specified in the filelogging.php
the logging channel, is being performed writing data;
Example of a logged event class:
<?php class SomeApplicationEvent implements \Feugene\EventsLogLaravel\Contracts\ShouldBeLoggedContract { /** * {@inheritdoc} */ public function logLevel(): string { return 'info'; } /** * {@inheritdoc} */ public function logMessage(): string { return 'My log message'; } /** * {@inheritdoc} */ public function logEventExtraData(): array { return ['key' => 'any value']; } /** * {@inheritdoc} */ public function eventType(): string { return 'default_event'; } /** * {@inheritdoc} */ public function eventSource(): string { return 'service_name'; } public function eventTags(): array { return []; } }
Now it is enough to call at any place in your application:
event(new SomeApplicationEvent());
And be sure that this event will be recorded in a log file.
Logging conditions
In some cases, it is necessary to add logging conditions to event. To do this, you can use the
skipLogging
method in the event class:
<?php class YourEvent implements \Feugene\EventsLogLaravel\Contracts\ShouldBeLoggedContract { /** * @var int */ protected $value = 101; /** * {@inheritDoc} */ public function logMessage(): string { return 'foo bar'; } /** * {@inheritDoc} */ public function skipLogging(): bool { return $this->value > 100; } // ... }
Additional loggers
Together with this package, the following pre-configured loggers are available to
you Feugene\EventsLogLaravel\Logging\...
:
Testing
For package testing we use phpunit
framework and docker-ce
+ docker-compose
as develop environment. So, just write
into your terminal after repository cloning:
$ make build $ make latest # or 'make lowest' $ make test
Changes log
Changes log can be found here.
Support
If you will find any package errors, please, make an issue in current repository.
License
This is open-sourced software licensed under the MIT License.