nikolaynesov / laravel-command-streaming
Stream Laravel command output to any filesystem disk (local, S3, etc.)
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/nikolaynesov/laravel-command-streaming
Requires
- php: ^8.2
- illuminate/console: ^11.0
- illuminate/filesystem: ^11.0
- illuminate/support: ^11.0
Requires (Dev)
- orchestra/testbench: ^9.0
- pestphp/pest: ^3.0
README
Stream Laravel Artisan command output to any filesystem disk (local, S3, etc.).
Installation
composer require nikolaynesov/laravel-command-streaming
Publish the configuration file:
php artisan vendor:publish --tag=command-streaming-config
Configuration
// config/command-streaming.php return [ 'enabled' => env('COMMAND_STREAMING_ENABLED', false), 'disk' => env('COMMAND_STREAMING_DISK', 'local'), 'path_prefix' => 'command-logs', ];
Usage
Add the trait and call startStreaming() / stopStreaming():
use Illuminate\Console\Command; use Nikolaynesov\CommandStreaming\Traits\StreamsCommandOutput; class MyCommand extends Command { use StreamsCommandOutput; protected $signature = 'my:command'; public function handle(): int { $this->startStreaming(); $this->info('This output will be streamed!'); $this->line('Processing...'); $this->error('Any errors are captured too'); $this->stopStreaming(); return 0; } }
When COMMAND_STREAMING_ENABLED=true, output between startStreaming() and stopStreaming() is:
- Displayed in the terminal (as normal)
- Written to a log file on the configured disk
Storage
Local (default)
COMMAND_STREAMING_ENABLED=true COMMAND_STREAMING_DISK=local
Logs saved to storage/app/command-logs/
S3
COMMAND_STREAMING_ENABLED=true COMMAND_STREAMING_DISK=s3
Custom Disk
// config/filesystems.php 'command-logs' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_COMMAND_LOGS_BUCKET'), ],
COMMAND_STREAMING_DISK=command-logs
Log Format
Logs stored at: {disk}/{path_prefix}/{command-name}/{timestamp}.log
[2025-01-15_10-30-45] Command: my:command
------------------------------------------------------------
Starting...
Processing item 1
Done!
------------------------------------------------------------
[2025-01-15_10-31-02] Command finished
Testing
composer install && ./vendor/bin/pest
License
MIT