1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- <?php
- declare(strict_types=1);
- /**
- * This file is part of Hyperf.
- *
- * @link https://www.hyperf.io
- * @document https://hyperf.wiki
- * @contact group@hyperf.io
- * @license https://github.com/hyperf/hyperf/blob/master/LICENSE
- */
- namespace App\Listener;
- use Hyperf\AsyncQueue\AnnotationJob;
- use Hyperf\AsyncQueue\Event\AfterHandle;
- use Hyperf\AsyncQueue\Event\BeforeHandle;
- use Hyperf\AsyncQueue\Event\Event;
- use Hyperf\AsyncQueue\Event\FailedHandle;
- use Hyperf\AsyncQueue\Event\RetryHandle;
- use Hyperf\Event\Annotation\Listener;
- use Hyperf\Event\Contract\ListenerInterface;
- use Hyperf\Logger\LoggerFactory;
- use Psr\Container\ContainerInterface;
- use Psr\Log\LoggerInterface;
- #[Listener]
- class QueueHandleListener implements ListenerInterface
- {
- protected LoggerInterface $logger;
- public function __construct(ContainerInterface $container)
- {
- $this->logger = $container->get(LoggerFactory::class)->get('queue');
- }
- public function listen(): array
- {
- return [
- AfterHandle::class,
- BeforeHandle::class,
- FailedHandle::class,
- RetryHandle::class,
- ];
- }
- public function process(object $event): void
- {
- if ($event instanceof Event && $event->getMessage()->job()) {
- $job = $event->getMessage()->job();
- $jobClass = get_class($job);
- if ($job instanceof AnnotationJob) {
- $jobClass = sprintf('Job[%s@%s]', $job->class, $job->method);
- }
- $date = date('Y-m-d H:i:s');
- switch (true) {
- case $event instanceof BeforeHandle:
- $this->logger->info(sprintf('[%s] Processing %s.', $date, $jobClass));
- break;
- case $event instanceof AfterHandle:
- $this->logger->info(sprintf('[%s] Processed %s.', $date, $jobClass));
- break;
- case $event instanceof FailedHandle:
- $this->logger->error(sprintf('[%s] Failed %s.', $date, $jobClass));
- $this->logger->error((string) $event->getThrowable());
- break;
- case $event instanceof RetryHandle:
- $this->logger->warning(sprintf('[%s] Retried %s.', $date, $jobClass));
- break;
- }
- }
- }
- }
|