簡體   English   中英

Laravel 5.4是否已完成日志工作的解決方案?

[英]Has Laravel 5.4 a solution to log jobs done?

我在我的項目中使用Laravel 5.4和MySQL。

遠程服務器是PHP Server 7

當用戶將記錄保存到數據庫時,它還會創建一個隊列作業來通知相關的公司官員。 我的代碼在控制器文件中

    foreach($audit->mailusers AS $mailuser){
        $this->dispatch(new SendAuditEmail($audit->id, $mailuser->name, $mailuser->email));
    }

我正在為QUEUE DRIVER使用數據庫。 我的意思是它是用.env文件寫的:

QUEUE_DRIVER=database

如您所知,如果您使用的是“數據庫”而不是“redis”或其他隊列驅動程序,則數據庫中必須有“jobs”表:

CREATE TABLE `jobs` (
   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
   `queue` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
   `payload` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
   `attempts` tinyint(3) unsigned NOT NULL,
   `reserved_at` int(10) unsigned DEFAULT NULL,
   `available_at` int(10) unsigned NOT NULL,
   `created_at` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id`),
 KEY `jobs_queue_reserved_at_index` (`queue`,`reserved_at`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 
COLLATE=utf8mb4_unicode_ci;

如您所知,如果您想處理失敗的作業,您的數據庫中應該還有一個名為“failed_jobs”的表:

CREATE TABLE `failed_jobs` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `connection` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `queue` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `payload` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
  `exception` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
  `failed_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

要創建“failed_jobs”表( ),首先必須運行artisan命令:

php artisan queue:failed-table

此命令將在database \\ migrations文件夾中創建遷移php文件

然后通過運行migrate命令,您可以創建failed_jobs表:

php artisan migrate

要處理作業表中的作業:

php artisan queue:work

隊列工作人員的行為如下:

1-如果“作業”表中的作業失敗,請將其保存到“failed_jobs”表並從“作業”表中刪除

2-如果作業成功完成,只需從“作業”表中刪除即可。 不要再在任何地方保存,只需刪除此作業即可。

最后,我的問題是:如果隊列工作者成功完成一個作業,那么無論如何都要將此作業記錄保存到名為“completed_jobs”的數據庫中的任何其他表中。

因為,對我來說很重要的是: “安德森先生的郵件是由Queue Worker在25.01.2018 15:42:20發送的”

Laravel解雇工作之前,之后和失敗的工作事件。 根據需要,您可以在事件后注冊偵聽器並存儲已成功運行的作業的記錄。

在服務提供者的引導方法中:

   Queue::after(function (JobProcessed $event) {
        // $event->connectionName
        // $event->job
        // $event->job->payload()
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM