调试 Laravel 作业

问题描述 投票:0回答:6

我正在尝试调试 Laravel 队列中的作业,但没有成功。我想将输出打印到控制台。例如您如何在其他地方使用

dd()

<?php

namespace App\Jobs;

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

class ProcessImage implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $image;

    /**
     * Attempt the job a maximum of twice
     *
     * @var int
     */
    public $tries = 2;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(Image $image)
    {

        $this->image = $image;

    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // set paths for standard and thumbnail size images

        $image          = public_path("assets" . DIRECTORY_SEPARATOR . $this->image->original);
        $product_id     = $this->image->id;
        $product_path   = public_path("assets" . DIRECTORY_SEPARATOR . "images" . DIRECTORY_SEPARATOR .
            "products" . DIRECTORY_SEPARATOR . $product_id);


        $thumbnail_path = $product_path . DIRECTORY_SEPARATOR . "thumbnail";

        if(!is_dir($product_path))
            mkdir($product_path);

        if(!is_dir($thumbnail_path))
            mkdir($thumbnail_path);

        // Resize and save the standard image

        $standard = \Image::make($image)->resize(450, 450, function($constraint)
        {
            $constraint->aspectRatio();
        })->save($product_path);

        dd($standard);

    }
}
php laravel jobs
6个回答
23
投票
  1. 运行

    php artisan queue:restart
    - 如果您将队列作为守护进程运行,则每次代码更改时都需要重新启动侦听器,因为守护进程将代码加载到内存中。

  2. dump()
    dd()
    Log::info()
    应该在队列中工作。确保逐步调试 - 在作业开始时登录,然后再低一点、再低一点,等等,看看最后注销的点是什么。

  3. 排队任务中

    dump()
    dd()
    的输出被发送到
    storage/logs/worker.log
    Log::info()
    输出发送到位于
    storage/logs/laravel.log
    的常用日志。

  4. 使用laravel望远镜查看更多细节


11
投票

如果你想使用 PHP Storm 调试 Laravel Job 编辑

.env
文件:

QUEUE_DRIVER=sync

handle()
函数中放置一个断点。


6
投票

您不需要在控制台上打印它。 失败作业的完整描述存储在异常列中。(表名称fail_jobs)。


3
投票

我所做的是记录需要查看的信息,就像您的情况一样:

\Log::info('Making new directory');

或者

\Log::info('this is new image: ', [$standard]);

等等。只需打开日志信息并查看代码在哪里中断或应该起作用的条件不起作用。


1
投票

我使用 print_r() 可以完成这项工作。


0
投票

我用两种方式做到了:

  1. 通过方法

    Cache
    使用
    put()
    外观。接下来,您可以使用
    Cache::get($cacheKey);
    获得它。在这里我可以传递任何数据类型:Collectionsarraysintegerstring

  2. 通过方法

    Log
    使用
    debug()
    外观。第一个参数是消息,第二个参数是上下文仅限数组类型

第一个变体更容易调试各种数据,但第二个变体更容易获取调试信息。我更喜欢第一个变体:)

© www.soinside.com 2019 - 2024. All rights reserved.