如何检查我的工作是否在派遣后调用handle方法?

时间:2020-03-26 15:37:59

标签: php laravel laravel-jobs

我有以下控制器:

namespace App\Controllers;

use App\Jobs\MyJob;

class MyController
{
  public function dispatchJob(int $user_id)
  {
     MyJob::dispatch($user_id);
  }

}

我有以下工作:

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;


use App\Model\Etable\User;

class MyJob implements ShouldQueue
{
    use Dispatchable;
    use InteractsWithQueue;
    use Queueable;

    /**
     * @var int
     */
    private $user_id;


    /**
     * @param User   $user          The user that has opted or deopted for newsletter consent
     */
    public function __construct(int $user_id)
    {
        $this->user_id       = $user_id;
    }

    public function handle(): void
    {
        //Logic Here
    }
}

然后拖延开发我看是否访问指示dispatchJob控制器方法的路线将分派工作。但是我注意到我的工作是继续派遣:

[2020-03-26 17:18:04][17834] Processing: App\Jobs\MyJob
[2020-03-26 17:18:04][17835] Processing: App\Jobs\MyJob
[2020-03-26 17:18:05][17836] Processing: App\Jobs\MyJob
[2020-03-26 17:18:05][17837] Processing: App\Jobs\MyJob
[2020-03-26 17:18:06][17838] Processing: App\Jobs\MyJob
[2020-03-26 17:18:07][17839] Processing: App\Jobs\MyJob
[2020-03-26 17:18:07][17840] Processing: App\Jobs\MyJob
[2020-03-26 17:18:08][17841] Processing: App\Jobs\MyJob
[2020-03-26 17:18:08][17842] Processing: App\Jobs\MyJob
[2020-03-26 17:18:09][17843] Processing: App\Jobs\MyJob
[2020-03-26 17:18:09][17844] Processing: App\Jobs\MyJob
[2020-03-26 17:18:10][17845] Processing: App\Jobs\MyJob
[2020-03-26 17:18:11][17846] Processing: App\Jobs\MyJob
[2020-03-26 17:18:11][17847] Processing: App\Jobs\MyJob
[2020-03-26 17:18:12][17848] Processing: App\Jobs\MyJob
[2020-03-26 17:18:13][17849] Processing: App\Jobs\MyJob
[2020-03-26 17:18:13][17850] Processing: App\Jobs\MyJob
[2020-03-26 17:18:14][17851] Processing: App\Jobs\MyJob
[2020-03-26 17:18:14][17852] Processing: App\Jobs\MyJob
[2020-03-26 17:18:15][17853] Processing: App\Jobs\MyJob

使用的命令是php artisan queue:listen

但是似乎没有一项工作成功或失败。所以我想调试原因。所以我想问以下问题:

  1. 如何使我的代码进入工作的断点,以便可以使用Xdebug对其进行调试?我尝试通过命令XDEBUG_CONFIG="idekey=VSCODE" php artisan queue:listen启动运行程序,但我的IDE仍无法闯入我的断点。

  2. 我还如何记录dumpdd函数的信息,以便可以在运行artisan命令的屏幕/控制台中看到结果?我尝试查看larave的默认日志:./storage/logs/laravel-2020-03-26.log仍未在控制台或日志上看到有关dumpdd

  3. 的任何输出

我尝试了上面的方法,但是都看不到dd的输出或断点。

此外,我尝试使用专用的日志通道:

        'jobs' => [
            'driver' => 'daily',
            'path'   => storage_path('logs/jobs.log'),
            'level'  => 'debug',
            'days'   => 7,
        ],

然后使用以下方法记录任何消息:

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;


use App\Model\Etable\User;

class MyJob implements ShouldQueue
{
    use Dispatchable;
    use InteractsWithQueue;
    use Queueable;

    /**
     * @var int
     */
    private $user_id;


    /**
     * @param User   $user          The user that has opted or deopted for newsletter consent
     */
    public function __construct(int $user_id)
    {
        $this->user_id       = $user_id;
    }

    public function handle(): void
    {
        Log::channel('jobs')->debug("hello");
        Log::channel('jobs')->debug(var_export($this->user,true));
        //Logic Here
    }
}

但是没有任何信息已登录./storage/logs/jobs-2020-03-26.log。您知道我分派工作后如何获取有关正在执行的内容的调试信息吗?我要实现的是登录,并直观地表明正在调用方法句柄。

1 个答案:

答案 0 :(得分:0)

一种快速简便的检查方法是只记录如下字符串:

 public function handle(): void
 {
    Log::channel('jobs')->debug("Job Started");
    //Logic Here
    Log::channel('jobs')->debug("Job Ended");
 }

然后在每一行代码之后放置Log::channel('jobs')->debug("Job ...");命令,以检查代码在何处中断。