[Contribution Atwix]{class="badge informative" title="Atwix"} [PaaS uniquement]{class="badge informative" title="S’applique uniquement aux projets Adobe Commerce on Cloud (infrastructure PaaS gérée par Adobe) et aux projets On-premise."}
Écrire dans un fichier journal personnalisé
Le module Magento\Framework\Logger contient les classes de gestionnaire suivantes :
/var/log/debug.log/var/log/exception.log/var/log/system.logVous pouvez les trouver dans le répertoire lib/internal/Magento/Framework/Logger/Handler.
Vous pouvez utiliser l’une des méthodes suivantes pour vous connecter à un fichier personnalisé :
- Configurer un fichier journal personnalisé dans le
di.xml - Configurer un fichier personnalisé dans la classe de gestionnaire d’enregistreur personnalisé
Configurer un fichier journal personnalisé dans le di.xml
Cet exemple montre comment utiliser les types virtuels pour consigner des messages debug dans un fichier journal personnalisé au lieu d'un /var/log/debug.log standard.
-
Dans le fichier
di.xmlde votre module, définissez un fichier journal personnalisé en tant que type virtuel.code language-xml <virtualType name="Magento\Payment\Model\Method\MyCustomDebug" type="Magento\Framework\Logger\Handler\Base"> <arguments> <argument name="fileName" xsi:type="string">/var/log/payment.log</argument> </arguments> </virtualType>La valeur
namedeMagento\Payment\Model\Method\MyCustomDebugdoit être unique. -
Définissez le gestionnaire dans un autre type virtuel avec un
nameunique :code language-xml <virtualType name="Magento\Payment\Model\Method\MyCustomLogger" type="Magento\Framework\Logger\Monolog"> <arguments> <argument name="handlers" xsi:type="array"> <item name="debug" xsi:type="object">Magento\Payment\Model\Method\MyCustomDebug</item> </argument> </arguments> </virtualType> -
Insérez le
MyCustomLoggertype virtuel dans l’objetMagento\Payment\Model\Method\Logger:code language-xml <type name="Magento\Payment\Model\Method\Logger"> <arguments> <argument name="logger" xsi:type="object">Magento\Payment\Model\Method\MyCustomLogger</argument> </arguments> </type> -
Le
Magento\Payment\Model\Method\MyCustomDebugde classe virtuel est injecté dans le gestionnaire dedebugde la propriété$loggerdans la classeMagento\Payment\Model\Method\Logger.code language-xml ... <argument name="handlers" xsi:type="array"> <item name="debug" xsi:type="object">Magento\Payment\Model\Method\MyCustomDebug</item> </argument>
Les messages d’exception sont consignés dans le fichier /var/log/payment.log.
Configurez un fichier journal personnalisé dans la classe de gestionnaire d’enregistreur
Cet exemple montre comment utiliser une classe de gestionnaire d’enregistreur personnalisée pour consigner les messages error dans un fichier journal spécifique.
-
Créez une classe qui enregistre les données. Dans cet exemple, la classe est définie dans
app/code/Vendor/ModuleName/Logger/Handler/ErrorHandler.php.code language-php <?php /** * @author Vendor * @copyright Copyright (c) 2019 Vendor (https://www.vendor.com/) */ namespace Vendor\ModuleName\Logger\Handler; use Magento\Framework\Logger\Handler\Base as BaseHandler; use Monolog\Logger as MonologLogger; /** * Class ErrorHandler */ class ErrorHandler extends BaseHandler { /** * Logging level * * @var int */ protected $loggerType = MonologLogger::ERROR; /** * File name * * @var string */ protected $fileName = '/var/log/my_custom_logger/error.log'; } -
Définissez le gestionnaire de cette classe en tant que type virtuel dans le fichier
di.xmldu module.code language-xml <virtualType name="MyCustomLogger" type="Magento\Framework\Logger\Monolog"> <arguments> <argument name="handlers" xsi:type="array"> <item name="error" xsi:type="object">Vendor\ModuleName\Logger\Handler\ErrorHandler</item> </argument> </arguments> </virtualType>MyCustomLoggerest un identifiant unique. -
Dans la définition de
type, spécifiez le nom de la classe dans laquelle le gestionnaire d’enregistreur personnalisé est injecté. Utilisez le nom du type virtuel de l’étape précédente comme argument pour ce type.code language-xml <type name="Vendor\ModuleName\Observer\MyObserver"> <arguments> <argument name="logger" xsi:type="object">MyCustomLogger</argument> </arguments> </type>Code Source de la classe
Vendor\ModuleName\Observer\MyObserver:code language-php <?php /** * @author Vendor * @copyright Copyright (c) 2019 Vendor (https://www.vendor.com/) */ declare(strict_types=1); namespace Vendor\ModuleName\Observer; use Psr\Log\LoggerInterface as PsrLoggerInterface; use Exception; use Magento\Framework\Event\ObserverInterface; use Magento\Framework\Event\Observer; /** * Class MyObserver */ class MyObserver implements ObserverInterface { /** * @var PsrLoggerInterface */ private $logger; /** * MyObserver constructor. * * @param PsrLoggerInterface $logger */ public function __construct( PsrLoggerInterface $logger ) { $this->logger = $logger; } /** * @param Observer $observer */ public function execute(Observer $observer) { try { // some code goes here } catch (Exception $e) { $this->logger->error($e->getMessage()); } } } -
Le
Vendor\ModuleName\Logger\Handler\ErrorHandlerde classe est injecté dans le gestionnaire deerrorde la propriété$loggerdans leVendor\ModuleName\Observer\MyObserver.code language-xml ... <argument name="handlers" xsi:type="array"> <item name="error" xsi:type="object">Vendor\ModuleName\Logger\Handler\ErrorHandler</item> </argument> ...
Les messages d’exception sont consignés dans le fichier /var/log/my_custom_logger/error.log.