decahedronio / laravel-event-logger

Pepper events into your code, and we'll automatically forward them to your logger

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Laravel Event Logger

Quickstart

composer require --dev "decahedron/laravel-event-logger"

php artisan vendor:publish --provider="Decahedron\LaravelEventLogger\EventLoggerServiceProvider"

We use Laravel's package discovery mechanism. This shouldn't affect most use cases.

How-to

It's incredibly useful to have logs throughout your code. But they can also look clunky and verbose:

Log::debug("Resetting user password", ['user' => $user, 'token' => $token]);
$user->password = Str::random(64);
$user->save();
Log::info("User password reset", ['user' => $user]);

We can choose to define these as events instead, providing our application with handy future hooks for future expansion, and logging without the verbosity:

event("user.service.password.resetting", ['user' => $user, 'token' => $token]);
$user->password = Str::random(64);
$user->save();
event("user.service.password.reset", ['user' => $user]);

Now we just have to define how we log these events.

Defining Events in Logs

After running the vendor:publish command, a new directory called event_logs should be in your project root, on the same level as routes or resources. A default entry file called event_logs.php is where you can define your event logs.

EventLog::register([
    'user.service.password.resetting' => 'Resetting user password',
    'user.service.password.reset' => 'info: User password reset',
]);

Note the info: prefix which we use to indicate the log level; it will be removed before sending. Only log levels accepted by Monolog are allowed.

Duplicates and Wildcards

Since we're just using laravel's event listeners, we can use wildcards:

EventLog::register([
    '*.password.reset' => 'info: A password has been reset',
    'user.service.password.reset' => 'info: User password reset',
]);

Multiple keys matching the same event will all fire.

Closure Logs

If you need to customize the log event, yet you really don't want to make a proper event listener:

EventLog::register([
    'user.service.password.reset' => function($logger, $event, $data) {
        $logger->to('security')->notice("User password has been reset", $data + ['_event' => $event]);
    },
]);

Extra Configs

See config/event-logs.php to change some common event logging settings.

  • When an event is sent to the logs, its original event name is sent along it as event_name_context. This is handy for searching and analytics.
  • channel defines the logging channel (new in L5.6) events should be logged to.
  • log_all determines if events not registered in event_logs.php will still be logged.
  • default_log_level is the level logs are sent as, if not prefixed like error:.

Bear in mind that logs simply use Laravel's logging system, so for advanced features, like adding more information to log events, can be tweaked from Laravel and Monolog directly.

About

Pepper events into your code, and we'll automatically forward them to your logger

License:MIT License


Languages

Language:PHP 100.0%