diff --git a/Gateway/Request/AdditionalDataLevel23DataBuilder.php b/Gateway/Request/AdditionalDataLevel23DataBuilder.php index 0ed6a23059..2676d12b01 100644 --- a/Gateway/Request/AdditionalDataLevel23DataBuilder.php +++ b/Gateway/Request/AdditionalDataLevel23DataBuilder.php @@ -69,7 +69,7 @@ public function build(array $buildSubject): array // `totalTaxAmount` field is required and L2/L3 data can not be generated without this field. if (empty($order->getTaxAmount()) || $order->getTaxAmount() < 0 || $order->getTaxAmount() === 0) { - $this->adyenLogger->warning(__('L2/L3 data can not be generated if tax amount is zero.')); + $this->adyenLogger->addAdyenWarning(__('L2/L3 data can not be generated if tax amount is zero.')); return $request; } diff --git a/Gateway/Response/PaymentCaptureDetailsHandler.php b/Gateway/Response/PaymentCaptureDetailsHandler.php index 8a01992eb8..984a8c3cbd 100644 --- a/Gateway/Response/PaymentCaptureDetailsHandler.php +++ b/Gateway/Response/PaymentCaptureDetailsHandler.php @@ -77,7 +77,7 @@ public function handle(array $handlingSubject, array $response) public function handlePartialOrMultipleCaptureRequests(Order\Payment $payment, $responseContainer) { $lastTransId = null; - $this->adyenLogger->info(sprintf( + $this->adyenLogger->addAdyenInfoLog(sprintf( 'Handling partial OR multiple capture response in details handler for order %s', $payment->getOrder()->getIncrementId() )); diff --git a/Gateway/Response/PaymentCommentHistoryHandler.php b/Gateway/Response/PaymentCommentHistoryHandler.php index 1bce11c9fa..d632bbfb08 100644 --- a/Gateway/Response/PaymentCommentHistoryHandler.php +++ b/Gateway/Response/PaymentCommentHistoryHandler.php @@ -74,7 +74,7 @@ public function handle(array $handlingSubject, array $response) */ private function handlePartialOrMultipleCaptureRequests($payment, array $responseContainer) { - $this->adyenLogger->info(sprintf( + $this->adyenLogger->addAdyenInfoLog(sprintf( 'Handling partial OR multiple capture response in comment history handler for order %s', $payment->getOrder()->getIncrementId() )); diff --git a/Helper/Address.php b/Helper/Address.php index b4a29dc97d..94740cb57d 100644 --- a/Helper/Address.php +++ b/Helper/Address.php @@ -66,7 +66,7 @@ public function getStreetAndHouseNumberFromAddress( } elseif ($address instanceof OrderAddressInterface) { $addressArray = $address->getStreet(); } else { - $this->logger->warning(sprintf( + $this->logger->addAdyenWarning(sprintf( 'Unknown address type %s passed to the getStreetAndHouseNumberFromAddress function', get_class($address) )); diff --git a/Helper/Data.php b/Helper/Data.php index b7a7edd5c3..72a8bf5ba2 100755 --- a/Helper/Data.php +++ b/Helper/Data.php @@ -1354,7 +1354,7 @@ public function logRequest(array $request, $apiVersion, $endpoint) $context['body'] = $this->filterReferences($request); } - $this->adyenLogger->info('Request to Adyen API ' . $endpoint, $context); + $this->adyenLogger->addAdyenInfoLog('Request to Adyen API ' . $endpoint, $context); } public function logResponse(array $response) @@ -1368,7 +1368,7 @@ public function logResponse(array $response) $context['body'] = $this->filterReferences($response); } - $this->adyenLogger->info('Response from Adyen API', $context); + $this->adyenLogger->addAdyenInfoLog('Response from Adyen API', $context); } public function logAdyenException(AdyenException $e) diff --git a/Helper/ManagementHelper.php b/Helper/ManagementHelper.php index 2baa4059c3..4112597e98 100644 --- a/Helper/ManagementHelper.php +++ b/Helper/ManagementHelper.php @@ -269,7 +269,7 @@ public function webhookTest( $response = null; try { $response = $service->testWebhook($merchantId, $webhookId, $testWebhookRequest); - $this->adyenLogger->info(sprintf('response from webhook test %s', $response)); + $this->adyenLogger->addAdyenInfoLog(sprintf('response from webhook test %s', $response)); } catch (AdyenException $exception) { $this->adyenLogger->error($exception->getMessage()); } diff --git a/Logger/AdyenLogger.php b/Logger/AdyenLogger.php index 671783b0ee..dc9c2a114b 100755 --- a/Logger/AdyenLogger.php +++ b/Logger/AdyenLogger.php @@ -3,7 +3,7 @@ * * Adyen Payment module (https://www.adyen.com/) * - * Copyright (c) 2015 Adyen BV (https://www.adyen.com/) + * Copyright (c) 2025 Adyen N.V. (https://www.adyen.com/) * See LICENSE.txt for license details. * * Author: Adyen @@ -12,55 +12,37 @@ namespace Adyen\Payment\Logger; use Adyen\Payment\Helper\Config; +use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\Phrase; use Magento\Sales\Model\Order as MagentoOrder; use Magento\Store\Model\StoreManagerInterface; +use Monolog\Level; use Monolog\Logger; +use Monolog\LoggerFactory; -class AdyenLogger extends Logger +class AdyenLogger { - /** - * Detailed debug information - */ const ADYEN_DEBUG = 101; const ADYEN_NOTIFICATION = 201; const ADYEN_RESULT = 202; - /** - * Logging levels from syslog protocol defined in RFC 5424 - * Overrule the default to add Adyen specific loggers to log into seperate files - * - * @var array $levels Logging levels - */ - protected static $levels = [ - 100 => 'DEBUG', - 101 => 'ADYEN_DEBUG', - 200 => 'INFO', - 201 => 'ADYEN_NOTIFICATION', - 202 => 'ADYEN_RESULT', - 250 => 'NOTICE', - 300 => 'WARNING', - 400 => 'ERROR', - 500 => 'CRITICAL', - 550 => 'ALERT', - 600 => 'EMERGENCY', - ]; - - /** - * @var Config - */ - private $config; + const ADYEN_INFO = 203; + const ADYEN_WARNING = 301; + const ADYEN_ERROR = 401; /** - * @var StoreManagerInterface + * @param Config $config + * @param StoreManagerInterface $storeManager + * @param LoggerFactory $loggerFactory + * @param array $handlers + * @param array $processors */ - private $storeManager; - - public function __construct(Config $config, StoreManagerInterface $storeManager, $name, array $handlers = array(), array $processors = array()) - { - parent::__construct($name, $handlers, $processors); - $this->config = $config; - $this->storeManager = $storeManager; - } + public function __construct( + private readonly Config $config, + private readonly StoreManagerInterface $storeManager, + private readonly LoggerFactory $loggerFactory, + private array $handlers = [], + private array $processors = [] + ) { } /** * Adds a webhook notification log record. @@ -71,27 +53,49 @@ public function __construct(Config $config, StoreManagerInterface $storeManager, * @param array $context The log context * @return Boolean Whether the record has been processed */ - public function addAdyenNotification($message, array $context = []) + public function addAdyenNotification(string $message, array $context = []): bool { - return $this->addRecord(static::ADYEN_NOTIFICATION, $message, $context); + $logger = $this->generateLogger(self::ADYEN_NOTIFICATION); + return $logger->addRecord(Level::Info, $message, $context); } - public function addAdyenDebug($message, array $context = []) + /** + * @param string $message + * @param array $context + * @return bool + * @throws NoSuchEntityException + */ + public function addAdyenDebug(string $message, array $context = []): bool { $storeId = $this->storeManager->getStore()->getId(); if ($this->config->debugLogsEnabled($storeId)) { - return $this->addRecord(static::ADYEN_DEBUG, $message, $context); + $logger = $this->generateLogger(self::ADYEN_DEBUG); + return $logger->addRecord(Level::Debug, $message, $context); + } else { + return false; } } - public function addAdyenWarning($message, array $context = []): bool + /** + * @param string $message + * @param array $context + * @return bool + */ + public function addAdyenWarning(string $message, array $context = []): bool { - return $this->addRecord(static::WARNING, $message, $context); + $logger = $this->generateLogger(self::ADYEN_WARNING); + return $logger->addRecord(Level::Warning, $message, $context); } - public function addAdyenResult($message, array $context = []) + /** + * @param string $message + * @param array $context + * @return bool + */ + public function addAdyenResult(string $message, array $context = []): bool { - return $this->addRecord(static::ADYEN_RESULT, $message, $context); + $logger = $this->generateLogger(self::ADYEN_RESULT); + return $logger->addRecord(Level::Info, $message, $context); } /** @@ -103,9 +107,21 @@ public function addAdyenResult($message, array $context = []) * @param array $context The log context * @return Boolean Whether the record has been processed */ - public function addAdyenInfoLog($message, array $context = []) + public function addAdyenInfoLog(string $message, array $context = []): bool + { + $logger = $this->generateLogger(self::ADYEN_INFO); + return $logger->addRecord(Level::Info, $message, $context); + } + + /** + * @param string $message + * @param array $context + * @return bool + */ + public function error(string $message, array $context = []): bool { - return $this->addRecord(static::INFO, $message, $context); + $logger = $this->generateLogger(self::ADYEN_ERROR); + return $logger->addRecord(Level::Error, $message, $context); } public function getOrderContext(MagentoOrder $order): array @@ -134,4 +150,42 @@ public function getInvoiceContext(MagentoOrder\Invoice $invoice): array 'invoiceCanRefund' => $invoice->canRefund() ]; } + + /** + * @param int $handler + * @return Logger + */ + private function generateLogger(int $handler): Logger + { + /** @var Logger $logger */ + $logger = $this->loggerFactory->create(['name' => 'Adyen Logger']); + + foreach ($this->processors as $processor) { + $logger->pushProcessor($processor); + } + + switch ($handler) { + case self::ADYEN_NOTIFICATION: + $logger->pushHandler($this->handlers['adyenNotification']); + break; + case self::ADYEN_WARNING: + $logger->pushHandler($this->handlers['adyenWarning']); + break; + case self::ADYEN_RESULT: + $logger->pushHandler($this->handlers['adyenResult']); + break; + case self::ADYEN_INFO: + $logger->pushHandler($this->handlers['adyenInfo']); + break; + case self::ADYEN_ERROR: + $logger->pushHandler($this->handlers['adyenError']); + break; + case self::ADYEN_DEBUG: + default: + $logger->pushHandler($this->handlers['adyenDebug']); + break; + } + + return $logger; + } } diff --git a/Logger/Handler/AdyenBase.php b/Logger/Handler/AdyenBase.php deleted file mode 100644 index 5d18910c14..0000000000 --- a/Logger/Handler/AdyenBase.php +++ /dev/null @@ -1,50 +0,0 @@ - - */ - -namespace Adyen\Payment\Logger\Handler; - -use Magento\Framework\Logger\Handler\Base; -use Monolog\Formatter\LineFormatter; -use Magento\Framework\Filesystem\DriverInterface; - -class AdyenBase extends Base -{ - /** - * AdyenBase constructor. - * - * @param DriverInterface $filesystem - * @param string|null $filePath - * @param string|null $fileName - * @param string|null $logFormat - */ - public function __construct( - DriverInterface $filesystem, - ?string $filePath = null, - ?string $fileName = null, - ?string $logFormat = null - ) - { - parent::__construct($filesystem, $filePath, $fileName); - - if ($logFormat) { - $this->setFormatter(new LineFormatter($logFormat)); - } - } - /** - * overwrite core it needs to be the exact level otherwise use different handler - * - * {@inheritdoc} - */ - public function isHandling(array $record): bool - { - return $record['level'] == $this->level; - } -} diff --git a/Logger/Handler/AdyenDebug.php b/Logger/Handler/AdyenDebug.php index 9869cd3e90..15df847cbb 100755 --- a/Logger/Handler/AdyenDebug.php +++ b/Logger/Handler/AdyenDebug.php @@ -3,7 +3,7 @@ * * Adyen Payment module (https://www.adyen.com/) * - * Copyright (c) 2015 Adyen BV (https://www.adyen.com/) + * Copyright (c) 2025 Adyen N.V. (https://www.adyen.com/) * See LICENSE.txt for license details. * * Author: Adyen @@ -11,20 +11,12 @@ namespace Adyen\Payment\Logger\Handler; -use Adyen\Payment\Logger\AdyenLogger; -use Monolog\Logger; +use Magento\Framework\Logger\Handler\Base; +use Monolog\Level; -class AdyenDebug extends AdyenBase +class AdyenDebug extends Base { - /** - * @var string - */ protected $fileName = '/var/log/adyen/debug.log'; - - /** - * @var int - */ - protected $loggerType = AdyenLogger::ADYEN_DEBUG; - - protected $level = AdyenLogger::ADYEN_DEBUG; + protected $loggerType = Level::Debug; + protected Level $level = Level::Debug; } diff --git a/Logger/Handler/AdyenError.php b/Logger/Handler/AdyenError.php index 197c5f4727..ff801c37b2 100755 --- a/Logger/Handler/AdyenError.php +++ b/Logger/Handler/AdyenError.php @@ -3,7 +3,7 @@ * * Adyen Payment module (https://www.adyen.com/) * - * Copyright (c) 2015 Adyen BV (https://www.adyen.com/) + * Copyright (c) 2025 Adyen N.V. (https://www.adyen.com/) * See LICENSE.txt for license details. * * Author: Adyen @@ -11,23 +11,12 @@ namespace Adyen\Payment\Logger\Handler; -use Adyen\Payment\Logger\AdyenLogger; -use Monolog\Logger; +use Magento\Framework\Logger\Handler\Base; +use Monolog\Level; -class AdyenError extends AdyenBase +class AdyenError extends Base { - /** - * @var string - */ protected $fileName = '/var/log/adyen/error.log'; - - /** - * @var int - */ - protected $loggerType = AdyenLogger::ERROR; - - /** - * @var - */ - protected $level = AdyenLogger::ERROR; + protected $loggerType = Level::Error; + protected Level $level = Level::Error; } diff --git a/Logger/Handler/AdyenInfo.php b/Logger/Handler/AdyenInfo.php index 0d7440846d..631f7d1e68 100755 --- a/Logger/Handler/AdyenInfo.php +++ b/Logger/Handler/AdyenInfo.php @@ -3,7 +3,7 @@ * * Adyen Payment module (https://www.adyen.com/) * - * Copyright (c) 2015 Adyen BV (https://www.adyen.com/) + * Copyright (c) 2025 Adyen N.V. (https://www.adyen.com/) * See LICENSE.txt for license details. * * Author: Adyen @@ -11,20 +11,12 @@ namespace Adyen\Payment\Logger\Handler; -use Adyen\Payment\Logger\AdyenLogger; -use Monolog\Logger; +use Magento\Framework\Logger\Handler\Base; +use Monolog\Level; -class AdyenInfo extends AdyenBase +class AdyenInfo extends Base { - /** - * @var string - */ protected $fileName = '/var/log/adyen/info.log'; - - /** - * @var int - */ - protected $loggerType = AdyenLogger::INFO; - - protected $level = AdyenLogger::INFO; + protected $loggerType = Level::Info; + protected Level $level = Level::Info; } diff --git a/Logger/Handler/AdyenNotification.php b/Logger/Handler/AdyenNotification.php index 95f4fbe114..f658c1c1d8 100644 --- a/Logger/Handler/AdyenNotification.php +++ b/Logger/Handler/AdyenNotification.php @@ -3,7 +3,7 @@ * * Adyen Payment module (https://www.adyen.com/) * - * Copyright (c) 2015 Adyen BV (https://www.adyen.com/) + * Copyright (c) 2025 Adyen N.V. (https://www.adyen.com/) * See LICENSE.txt for license details. * * Author: Adyen @@ -11,20 +11,12 @@ namespace Adyen\Payment\Logger\Handler; -use Monolog\Logger; -use Adyen\Payment\Logger\AdyenLogger; +use Magento\Framework\Logger\Handler\Base; +use Monolog\Level; -class AdyenNotification extends AdyenBase +class AdyenNotification extends Base { - /** - * @var string - */ protected $fileName = '/var/log/adyen/notification.log'; - - /** - * @var int - */ - protected $loggerType = AdyenLogger::ADYEN_NOTIFICATION; - - protected $level = AdyenLogger::ADYEN_NOTIFICATION; + protected $loggerType = Level::Info; + protected Level $level = Level::Info; } diff --git a/Logger/Handler/AdyenResult.php b/Logger/Handler/AdyenResult.php index ed5c0b7de4..34c82ca281 100644 --- a/Logger/Handler/AdyenResult.php +++ b/Logger/Handler/AdyenResult.php @@ -3,7 +3,7 @@ * * Adyen Payment module (https://www.adyen.com/) * - * Copyright (c) 2015 Adyen BV (https://www.adyen.com/) + * Copyright (c) 2025 Adyen N.V. (https://www.adyen.com/) * See LICENSE.txt for license details. * * Author: Adyen @@ -11,20 +11,12 @@ namespace Adyen\Payment\Logger\Handler; -use Monolog\Logger; -use Adyen\Payment\Logger\AdyenLogger; +use Magento\Framework\Logger\Handler\Base; +use Monolog\Level; -class AdyenResult extends AdyenBase +class AdyenResult extends Base { - /** - * @var string - */ protected $fileName = '/var/log/adyen/result.log'; - - /** - * @var int - */ - protected $loggerType = AdyenLogger::ADYEN_RESULT; - - protected $level = AdyenLogger::ADYEN_RESULT; + protected $loggerType = Level::Info; + protected Level $level = Level::Info; } diff --git a/Logger/Handler/AdyenWarning.php b/Logger/Handler/AdyenWarning.php index c67a2fadf9..ec2a3cdec0 100755 --- a/Logger/Handler/AdyenWarning.php +++ b/Logger/Handler/AdyenWarning.php @@ -3,7 +3,7 @@ * * Adyen Payment module (https://www.adyen.com/) * - * Copyright (c) 2022 Adyen BV (https://www.adyen.com/) + * Copyright (c) 2025 Adyen N.V. (https://www.adyen.com/) * See LICENSE.txt for license details. * * Author: Adyen @@ -11,19 +11,12 @@ namespace Adyen\Payment\Logger\Handler; -use Adyen\Payment\Logger\AdyenLogger; +use Magento\Framework\Logger\Handler\Base; +use Monolog\Level; -class AdyenWarning extends AdyenBase +class AdyenWarning extends Base { - /** - * @var string - */ protected $fileName = '/var/log/adyen/warning.log'; - - /** - * @var int - */ - protected $loggerType = AdyenLogger::WARNING; - - protected $level = AdyenLogger::WARNING; + protected $loggerType = Level::Warning; + protected Level $level = Level::Warning; } diff --git a/Model/Api/AdyenOrderPaymentStatus.php b/Model/Api/AdyenOrderPaymentStatus.php index fb2f03829d..55cc124b4a 100644 --- a/Model/Api/AdyenOrderPaymentStatus.php +++ b/Model/Api/AdyenOrderPaymentStatus.php @@ -53,7 +53,7 @@ public function getOrderPaymentStatus(string $orderId): string $additionalInformation = $payment->getAdditionalInformation(); if (empty($additionalInformation['resultCode'])) { - $this->adyenLogger->info('resultCode is empty in the payment\'s additional information'); + $this->adyenLogger->addAdyenInfoLog('resultCode is empty in the payment\'s additional information'); return json_encode( $this->paymentResponseHandler->formatPaymentResponse(PaymentResponseHandler::ERROR) ); diff --git a/Model/Api/GuestAdyenOrderPaymentStatus.php b/Model/Api/GuestAdyenOrderPaymentStatus.php index c51995ed70..d286ff9fb2 100644 --- a/Model/Api/GuestAdyenOrderPaymentStatus.php +++ b/Model/Api/GuestAdyenOrderPaymentStatus.php @@ -62,7 +62,7 @@ public function getOrderPaymentStatus(string $orderId, string $cartId): string $additionalInformation = $payment->getAdditionalInformation(); if (empty($additionalInformation['resultCode'])) { - $this->adyenLogger->info('resultCode is empty in the payment\'s additional information'); + $this->adyenLogger->addAdyenInfoLog('resultCode is empty in the payment\'s additional information'); return json_encode( $this->paymentResponseHandler->formatPaymentResponse(PaymentResponseHandler::ERROR) ); diff --git a/Model/Api/PaymentRequest.php b/Model/Api/PaymentRequest.php index f949de1f81..d4cd3d00bc 100755 --- a/Model/Api/PaymentRequest.php +++ b/Model/Api/PaymentRequest.php @@ -244,7 +244,7 @@ public function disableRecurringContract( $response = $service->disable(new DisableRequest($request)); $result = (array) $response->jsonSerialize(); } catch (Exception $e) { - $this->adyenLogger->info($e->getMessage()); + $this->adyenLogger->addAdyenInfoLog($e->getMessage()); } if (isset($result['response']) && $result['response'] == '[detail-successfully-disabled]') { diff --git a/Observer/BeforeShipmentObserver.php b/Observer/BeforeShipmentObserver.php index e22097b62e..1ced73aded 100644 --- a/Observer/BeforeShipmentObserver.php +++ b/Observer/BeforeShipmentObserver.php @@ -93,7 +93,7 @@ public function execute(Observer $observer): void $paymentMethodInstance = $payment->getMethodInstance(); if (!$this->paymentMethodsHelper->isAdyenPayment($paymentMethod)) { - $this->logger->info( + $this->logger->addAdyenInfoLog( "Payment method is not from Adyen for order id {$order->getId()}", ['observer' => 'BeforeShipmentObserver'] ); @@ -108,7 +108,7 @@ public function execute(Observer $observer): void if (strcmp((string) $openInvoiceCapture, self::ONSHIPMENT_CAPTURE_OPENINVOICE) !== 0) { - $this->logger->info( + $this->logger->addAdyenInfoLog( "Capture on shipment not configured for order id {$order->getId()}", ['observer' => 'BeforeShipmentObserver'] ); @@ -116,7 +116,7 @@ public function execute(Observer $observer): void } if (!$this->paymentMethodsHelper->isOpenInvoice($paymentMethodInstance)) { - $this->logger->info( + $this->logger->addAdyenInfoLog( "Payment method is from Adyen but isn't OpenInvoice for order id {$order->getId()}", ['observer' => 'BeforeShipmentObserver'] ); @@ -124,7 +124,7 @@ public function execute(Observer $observer): void } if (!$order->canInvoice()) { - $this->logger->info( + $this->logger->addAdyenInfoLog( "Cannot invoice order with id {$order->getId()}", ['observer' => 'BeforeShipmentObserver'] ); diff --git a/etc/di.xml b/etc/di.xml index 38b1887ad2..2eae563bb6 100755 --- a/etc/di.xml +++ b/etc/di.xml @@ -1446,7 +1446,6 @@ - AdyenLoggerTest Adyen\Payment\Logger\Handler\AdyenDebug Adyen\Payment\Logger\Handler\AdyenNotification @@ -4555,4 +4554,4 @@ adyen_afterpaytouch_US - \ No newline at end of file +