This package allows you to have events triggered by your Artisan Commands. The events available are:
Bmitch\ConsoleEvents\Events\CommandStarting
Triggered when an Artisan Command is starting.
Bmitch\ConsoleEvents\Events\CommandTerminating
Triggered when an Artisan Command is terminating.
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.
composer require bmitch/consoleevents
In any command that you wish to trigger these events simply replace the:
use Illuminate\Console\Command;
with
use Bmitch\ConsoleEvents\Command;
Create two listeners within the app/Listeners
folder like this:
<?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',
],
];
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}
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.
Please see CONTRIBUTING.md
The MIT License (MIT). Please see License File for more information.