[Contribuição de Atwix]{class="badge informative" title="Atwix"} [Somente PaaS]{class="badge informative" title="Aplica-se somente a projetos do Adobe Commerce na nuvem (infraestrutura do PaaS gerenciada pela Adobe) e a projetos locais."}

Gravar em um arquivo de log personalizado

O módulo Magento\Framework\Logger contém as seguintes classes de manipulador:

Você pode encontrá-los no diretório lib/internal/Magento/Framework/Logger/Handler.

Você pode usar uma das seguintes abordagens para fazer logon em um arquivo personalizado:

  • Configurar um arquivo de log personalizado no di.xml
  • Configurar um arquivo personalizado na classe de manipulador de log personalizado

Configurar um arquivo de log personalizado no di.xml

Este exemplo mostra como usar tipos virtuais para registrar mensagens debug em um arquivo de log personalizado em vez de um /var/log/debug.log padrão.

  1. No arquivo di.xml do módulo, defina um arquivo de log personalizado como um 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>
    

    O valor name de Magento\Payment\Model\Method\MyCustomDebug deve ser exclusivo.

  2. Defina o manipulador em outro tipo virtual com um name exclusivo:

    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. Insira o MyCustomLogger tipo virtual no 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. A classe virtual Magento\Payment\Model\Method\MyCustomDebug está inserida no manipulador debug da propriedade $logger na classe 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>
    

Mensagens de exceção são registradas no arquivo /var/log/payment.log.

Configurar um arquivo de log personalizado na classe de manipulador de log

Este exemplo mostra como usar uma classe de manipulador de agente de log personalizado para registrar mensagens error em um arquivo de log específico.

  1. Crie uma classe que registre dados. Neste exemplo, a classe é definida em 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 o manipulador para esta classe como um tipo virtual no arquivo di.xml do 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 é um identificador exclusivo.

  3. Na definição type, especifique o nome da classe em que o manipulador de log personalizado está inserido. Use o nome do tipo virtual da etapa anterior como argumento para esse tipo.

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

    Código Source da 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());
            }
        }
    }
    
  4. A classe Vendor\ModuleName\Logger\Handler\ErrorHandler é inserida no manipulador error da propriedade $logger em 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>
    ...
    

Mensagens de exceção registradas no arquivo /var/log/my_custom_logger/error.log.

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