From 5ee4b2b679b8217571ec1ddb6ee9cfe50ee4e2a4 Mon Sep 17 00:00:00 2001 From: Luca Gallinari Date: Wed, 8 Jun 2022 16:36:59 +0200 Subject: [PATCH 1/2] Call reset on the logger in order to clean buffers --- src/ProducerInstance.php | 10 ++++++++-- src/WorkerInstance.php | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/ProducerInstance.php b/src/ProducerInstance.php index d43453a..5385420 100644 --- a/src/ProducerInstance.php +++ b/src/ProducerInstance.php @@ -8,6 +8,7 @@ use function Amp\call; use Amp\Loop; use Amp\Promise; +use Monolog\ResettableInterface; use Psr\Log\LoggerInterface; use Webgriffe\Esb\Model\FlowConfig; use Webgriffe\Esb\Model\Job; @@ -31,7 +32,7 @@ final class ProducerInstance implements ProducerInstanceInterface private $producer; /** - * @var LoggerInterface + * @var LoggerInterface&ResettableInterface */ private $logger; @@ -50,11 +51,14 @@ final class ProducerInstance implements ProducerInstanceInterface */ private $queueManager; + /** + * @param LoggerInterface&ResettableInterface $logger + */ public function __construct( FlowConfig $flowConfig, ProducerInterface $producer, ?BeanstalkClient $beanstalkClient, - LoggerInterface $logger, + $logger, HttpProducersServer $httpProducersServer, CronProducersServer $cronProducersServer, ?ElasticSearch $elasticSearch, @@ -195,6 +199,8 @@ public function produceAndQueueJobs($data = null): Promise 'test' => $test ] ); + } finally { + $this->logger->reset(); } return $jobsCount; }); diff --git a/src/WorkerInstance.php b/src/WorkerInstance.php index 22a555b..5513722 100644 --- a/src/WorkerInstance.php +++ b/src/WorkerInstance.php @@ -8,6 +8,7 @@ use function Amp\call; use function Amp\delay; use Amp\Promise; +use Monolog\ResettableInterface; use Psr\Log\LoggerInterface; use Webgriffe\Esb\Exception\FatalQueueException; use Webgriffe\Esb\Model\ErroredJobEvent; @@ -37,7 +38,7 @@ final class WorkerInstance implements WorkerInstanceInterface private $worker; /** - * @var LoggerInterface + * @var LoggerInterface&ResettableInterface */ private $logger; @@ -51,12 +52,15 @@ final class WorkerInstance implements WorkerInstanceInterface */ private static $workCounts = []; + /** + * @param LoggerInterface&ResettableInterface $logger + */ public function __construct( FlowConfig $flowConfig, int $instanceId, WorkerInterface $worker, ?BeanstalkClient $beanstalkClient, - LoggerInterface $logger, + $logger, ?ElasticSearch $elasticSearch, WorkerQueueManagerInterface $queueManager = null ) { @@ -146,13 +150,16 @@ public function boot(): Promise try { /** @var JobInterface $job */ if (!($job = yield $this->queueManager->getNextJob())) { + $this->logger->reset(); // todo: necessary? break; } } catch (FatalQueueException $ex) { //Let this pass to stop the loop + $this->logger->reset(); // todo: necessary? throw $ex; } catch (\Exception $ex) { $this->logger->critical($ex->getMessage(), $globalLogContext); + $this->logger->reset(); continue; } @@ -207,6 +214,7 @@ public function boot(): Promise ) ); unset(self::$workCounts[$jobUuid]); + $this->logger->reset(); continue; } @@ -215,6 +223,8 @@ public function boot(): Promise 'Worker released a Job', array_merge($logContext, ['release_delay' => $this->flowConfig->getWorkerReleaseDelay()]) ); + } finally { + $this->logger->reset(); } } }); From b3fe61fbf0a72e1874869acc4002249d672e9a0c Mon Sep 17 00:00:00 2001 From: Luca Gallinari Date: Wed, 8 Jun 2022 18:08:34 +0200 Subject: [PATCH 2/2] Define custom logger class that simply extended monolog logger in order to have one interface only and use autowiring --- services.yml | 8 ++++++-- src/Logger/LoggerResettable.php | 11 +++++++++++ src/Logger/LoggerResettableInterface.php | 12 ++++++++++++ src/ProducerInstance.php | 10 +++------- src/WorkerInstance.php | 10 +++------- 5 files changed, 35 insertions(+), 16 deletions(-) create mode 100644 src/Logger/LoggerResettable.php create mode 100644 src/Logger/LoggerResettableInterface.php diff --git a/services.yml b/services.yml index 3ecd9df..39cc6a2 100644 --- a/services.yml +++ b/services.yml @@ -37,8 +37,12 @@ services: arguments: - 'text/html' - Psr\Log\LoggerInterface: - class: \Monolog\Logger + Psr\Log\LoggerInterface: '@webgriffe_esb_logger' + + Webgriffe\Esb\LoggerResettableInterface: '@webgriffe_esb_logger' + + webgriffe_esb_logger: + class: \Webgriffe\Esb\Logger\LoggerResettable arguments: [ 'esb', ['@Monolog\Handler\StreamHandler', '@Monolog\Handler\ErrorLogHandler', '@Monolog\Handler\NativeMailerHandler'] ] public: true diff --git a/src/Logger/LoggerResettable.php b/src/Logger/LoggerResettable.php new file mode 100644 index 0000000..2be7373 --- /dev/null +++ b/src/Logger/LoggerResettable.php @@ -0,0 +1,11 @@ +