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

v1.0.1 2026-01-25 19:05 UTC

This package is auto-updated.

Last update: 2026-01-25 19:08:02 UTC


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:

  1. Displayed in the terminal (as normal)
  2. 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