#laravel
Вопрос:
Мне любопытно, знаете ли вы, ребята, какой-нибудь простой и надежный способ отследить источник того, что отправило задание Laravel.
Мой вариант использования для этого заключается в том, что мне часто приходится отлаживать неудачные задания, и знание того, почему, куда и как они были отправлены, было бы очень полезно, например, можно было бы добавить их в качестве метаданных в отчеты Sentry.
Я имею в виду, что добавление свойства к заданию, вероятно, сделало бы это, но мне интересно, есть ли какой-то способ, который не включал бы изменения кода в отдельных заданиях.
Ответ №1:
Я думаю, вы ищете События для работы (документация Laravel)
Вы могли бы добавить это в свой app/Providers/AppServiceProvider.php — метод загрузки() или вы можете создать, например, один QueueJobProvider и добавить своего провайдера в config/app.php внутри ключа «провайдеры«.
С помощью этих событий вы можете получить полезную нагрузку по своему усмотрению и больше прав. Вы можете узнать больше об этой проблеме в документах Laravel здесь
use IlluminateQueueEventsJobProcessed;
use IlluminateQueueEventsJobProcessing;
use IlluminateQueueEventsJobFailed;
use IlluminateQueueEventsJobExceptionOccurred;
Queue::before(function (JobProcessing $event) {
// Log::info($event);
// Log::info($event->job->payload());
});
Queue::after(function (JobProcessed $event) {
// Log::info($event);
// Log::info($event->job->payload());
});
Queue::failing(function (JobFailed $event) {
// Log::info($event);
// Log::info($event->job->payload());
});
Queue::exceptionOccurred(function (JobExceptionOccurred $event) {
// Log::info($event);
// Log::info($event->job->payload());
});
Комментарии:
1. Да, они очень полезны, но я не думаю, что они полностью удовлетворяют мою потребность. Насколько я понимаю, они вызываются с объектами заданий, которые уже находятся в очереди, что не дает мне возможности узнать, куда в коде было отправлено задание. Единственное, о чем я могу думать в данный момент, — это сброс части трассировки стека в конструкторе заданий, но это кажется очень банальным.