[Gentileza de Atwix]{class="badge informative" title="Atwix"}

Escribir en un archivo de registro personalizado

El módulo Magento\Framework\Logger contiene las siguientes clases de controladores:

Puede encontrarlos en el directorio lib/internal/Magento/Framework/Logger/Handler.

Puede utilizar uno de los siguientes métodos para iniciar sesión en un archivo personalizado:

  • Configurar un archivo de registro personalizado en di.xml
  • Configurar un archivo personalizado en la clase de controlador de registrador personalizado

Configurar un archivo de registro personalizado en di.xml

Este ejemplo muestra cómo usar tipos virtuales para registrar debug mensajes en un archivo de registro personalizado en lugar de un /var/log/debug.log estándar.

  1. En el archivo di.xml de su módulo, defina un archivo de registro personalizado como tipo virtual.

    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>
    

    El valor name de Magento\Payment\Model\Method\MyCustomDebug debe ser único.

  2. Defina el controlador en otro tipo virtual con un name único:

    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>
    
  3. Inyecte el MyCustomLogger tipo virtual en el objeto Magento\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>
    
  4. La clase virtual Magento\Payment\Model\Method\MyCustomDebug se inserta en el controlador debug de la propiedad $logger en la clase Magento\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>
    

Los mensajes de excepción se han registrado en el archivo /var/log/payment.log.

Configurar un archivo de registro personalizado en la clase de controlador del registrador

Este ejemplo muestra cómo utilizar una clase de controlador de registrador personalizada para registrar error mensajes en un archivo de registro específico.

  1. Cree una clase que registre datos. En este ejemplo, la clase se define en 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';
    }
    
  2. Defina el controlador para esta clase como un tipo virtual en el archivo di.xml del módulo.

    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>
    

    MyCustomLogger es un identificador único.

  3. En la definición type, especifique el nombre de clase donde se inserta el controlador de registrador personalizado. Utilice el nombre de tipo virtual del paso anterior como argumento para este tipo.

    code language-xml
    <type name="Vendor\ModuleName\Observer\MyObserver">
        <arguments>
            <argument name="logger" xsi:type="object">MyCustomLogger</argument>
        </arguments>
    </type>
    

    Código Source de la clase 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());
            }
        }
    }
    
  4. La clase Vendor\ModuleName\Logger\Handler\ErrorHandler se inserta en el controlador error de la propiedad $logger en Vendor\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>
    ...
    

Los mensajes de excepción se registran en el archivo /var/log/my_custom_logger/error.log.

recommendation-more-help
386822bd-e32c-40a8-81c2-ed90ad1e198c