如何在 Laravel 中自定义作业的日志输出?

Пав*_*нов 5 php logging supervisord laravel

我看到 Laravel 使用 Monolog 库来处理日志。我在工作中有以下处理方法:

ApiUpdateItemJob.php:

public function handle()
{
    $data = [
        'id' => $this->item_id,
        'data[status]' => $this->status,
    ];

    $response = ApiFacedeClient::exec('Item', 'update', $data);

    $result = json_decode($response->getBody());
}
Run Code Online (Sandbox Code Playgroud)

在工人的日志(主管)中,我看到以下内容:

public function handle()
{
    $data = [
        'id' => $this->item_id,
        'data[status]' => $this->status,
    ];

    $response = ApiFacedeClient::exec('Item', 'update', $data);

    $result = json_decode($response->getBody());
}
Run Code Online (Sandbox Code Playgroud)

我应该在作业中添加什么才能看到以下行:

[2019-12-17 05:11:54][40792762] 处理项目 ID #333333(状态 [200 OK]):App\Jobs\UpdateItemStatus

Sap*_*aik 5

你在 worker 的日志文件中看到的日志是 Laravel 输出的,并且是不可配置的。

您最好的选择是定义一个自定义日志通道,该通道记录到工作人员的文件并在您HTTP提出请求后推送您的文件。

  1. 定义一个基于单个文件或路径的记录器通道config/logging.php

    'supervisorLog' => [
        'driver' => 'single',
        'name' => 'supervisor-log',
        // ath should be same as stdout_logfile in supervisord.conf
        'path' => storage_path('path/to/supervisor/log/file'), 
        'locking' => false
    ],
    
    Run Code Online (Sandbox Code Playgroud)
  2. $result = json_decode($response->getBody());在你的之后添加这个ApiUpdateItemJob.php

    Log::channel('supervisorLog')->info("Processing item id " + $this->item_id +" (Status ["+ $response->status() +"]): App\Jobs\UpdateItemStatus");

结果将类似于:

[2019-12-17 05:11:53][40792760] 处理:App\Jobs\UpdateItemStatus

[2019-12-17 05:11:54][40792761] 处理项目 ID #333333(状态 [200]):App\Jobs\UpdateItemStatus

[2019-12-17 05:11:54][40792760] 已处理:App\Jobs\UpdateItemStatus