覆盖 Laravel 队列监听器输出 [Laravel <=5.2 only]

Mār*_*dis 4 queue laravel laravel-5.2

有没有办法以某种方式覆盖队列侦听器的输出?

Processed: Illuminate\Queue\CallQueuedHandler@call 不是很有用,如果我能以某种方式输出实际的作业名称,以及实际正在处理的一些参数,那就太好了。

挖了代码,WorkCommandclass用这一行来输出job的名字,但是我实际的job class和这里使用的job不一样。

$this->output->writeln('<error>['.Carbon::now()->format('Y-m-d H:i:s').'] Failed:</error> '.$job->getName());

Nic*_*ick 5

您可以通过使用相同的签名注册您自己的命令来覆盖输出。当您调用 时php artisan queue:work,您的命令将优先。

只需让您的命令从 Laravel 继承WorkCommand并覆盖其writeOutput()方法:

<?php // app/Console/Command/QueueWorkCommand.php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Contracts\Queue\Job;
use Illuminate\Queue\Console\WorkCommand;

class QueueWorkCommand extends WorkCommand
{
    /**
     * Write the status output for the queue worker.
     *
     * @param  \Illuminate\Contracts\Queue\Job  $job
     * @param  bool  $failed
     * @return void
     */
    protected function writeOutput(Job $job, $failed)
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

并记住在内核中注册它app/Console/Kernel.php