Console Events for Laravel Commands
, (*1)
What is it?
This package allows you to have events triggered by your Artisan Commands. The events available are:, (*2)
Bmitch\ConsoleEvents\Events\CommandStarting
Triggered when an Artisan Command is starting., (*3)
Bmitch\ConsoleEvents\Events\CommandTerminating
Triggered when an Artisan Command is terminating., (*4)
Why use it?
The main reason I created this package was for a use case where multiple commands were executed nightly and I wanted an easy way to log when they started and stopped. By hooking into these events it makes it easy., (*5)
How to Install
Add to composer
composer require bmitch/consoleevents
Modify commands to extend custom class
In any command that you wish to trigger these events simply replace the:, (*6)
use Illuminate\Console\Command;
with, (*7)
use Bmitch\ConsoleEvents\Command;
Create and Register Listeners
Create two listeners within the app/Listeners folder like this:, (*8)
<?php
namespace App\Listeners;
use Log;
use Bmitch\ConsoleEvents\Events\CommandStarting;
class CommandStartingListener
{
/**
* Handle the event.
*
* @param CommandStarting $commandStartingEvent
* @return void
*/
public function handle(CommandStarting $commandStartingEvent)
{
$name = $commandStartingEvent->command->getName();
Log::info("Command {$name} starting");
}
}
<?php
namespace App\Listeners;
use Log;
use Bmitch\ConsoleEvents\Events\CommandTerminating;
class CommandTerminatingListener
{
/**
* Handle the event.
*
* @param CommandTerminating $commandTerminatingEvent
* @return void
*/
public function handle(CommandTerminating $commandTerminatingEvent)
{
$command = $commandTerminatingEvent->command;
$name = $command->getName();
Log::info("Command {$name} stopping", [
'commandName' => $name,
'executionTime' => $command->getExecutionTime(),
'exitCode' => $commandTerminatingEvent->exitCode,
]);
}
}
Then register it within the `app\Providers\EventServiceProvider.php` class:
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'Bmitch\ConsoleEvents\Events\CommandStarting' => [
'App\Listeners\CommandStartingListener',
],
'Bmitch\ConsoleEvents\Events\CommandTerminating' => [
'App\Listeners\CommandTerminatingListener',
],
];
## Seeing the results ##
Run your command and check `laravel.log`. You should see an entry that was triggered by the `CommandStartingListener`.
Something like:
[2016-12-02 00:16:11] local.INFO: Command foo:bar starting
[2016-12-02 00:16:11] local.INFO: Command foo:bar stopping {"commandName":"foo:bar","executionTime":0.005375862121582,"exitCode":0}
Additional Methods
The Bmitch\ConsoleEvents\Command class automatically tracks how long it takes to execute and provides a getExecutionTime() method to make it easy to add this data when Logging data., (*9)
Contributing
Please see CONTRIBUTING.md, (*10)
License
The MIT License (MIT). Please see License File for more information., (*11)